{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "#教程来源：https://numpy.org/doc/stable/user/quickstart.html"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# The Basics"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0,  1,  2,  3,  4],\n",
       "       [ 5,  6,  7,  8,  9],\n",
       "       [10, 11, 12, 13, 14]])"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = np.arange(15).reshape(3, 5)\n",
    "a  #同质多维数组ndarray"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ndarray类型为<class 'numpy.ndarray'>\n",
      "ndarray的维度ndim为2\n",
      "ndarray的shape为(3, 5)\n",
      "ndarray总的元素数size为15\n",
      "ndarray元素类型dtype为int32\n",
      "ndarray元素类型dtype.name为int32\n",
      "ndarray每个元素占据的字节数itemsize为4\n",
      "ndarray元素的buffer data为<memory at 0x000002CFFE04BE48>\n"
     ]
    }
   ],
   "source": [
    "#ndarray的重要属性\n",
    "print(\"ndarray类型为{}\".format(type(a)))\n",
    "print(\"ndarray的维度ndim为{}\".format(a.ndim))\n",
    "print(\"ndarray的shape为{}\".format(a.shape))\n",
    "print(\"ndarray总的元素数size为{}\".format(a.size))  #a.shape元素乘积\n",
    "print(\"ndarray元素类型dtype为{}\".format(a.dtype))  #这句是我加的\n",
    "print(\"ndarray元素类型dtype.name为{}\".format(a.dtype.name))  #官方代码不知道为什么多出了这个name\n",
    "print(\"ndarray每个元素占据的字节数itemsize为{}\".format(a.itemsize))\n",
    "print(\"ndarray元素的buffer data为{}\".format(a.data))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#array creation\n",
    "\n",
    "#方法1：通过Python的list或tuple创建ndarray\n",
    "a = np.array([1,2,3,4])\n",
    "#一种典型的错误情况：a = np.array(1,2,3,4)\n",
    "\n",
    "#array transforms sequences of sequences into two-dimensional arrays, sequences of sequences of sequences into three-dimensional arrays, and so on.\n",
    "b = np.array([(1.5,2,3), (4,5,6)])\n",
    "\n",
    "#自定义元素类型\n",
    "c = np.array( [ [1,2], [3,4] ], dtype=complex )\n",
    "\n",
    "#方法2：用占位符创建已知尺寸的数组（不用扩张数组，因为扩张数组很耗时）。默认dtype是float64\n",
    "d=np.zeros((3, 4))\n",
    "e=np.ones( (2,3,4), dtype=np.int16 )  #也可以自定义元素类型\n",
    "f=np.empty( (2,3) )  #根据内存状态随机初始化数组\n",
    "\n",
    "#arrange类似于Python内置的range\n",
    "g=np.arange( 10, 30, 5 )\n",
    "h=np.arange( 0, 2, 0.3 )  #接受小数参数。由于浮点数精度的原因，可能无法知道数组最后有多少个数\n",
    "\n",
    "i=np.linspace( 0, 2, 9 )  # 9 numbers from 0 to 2\n",
    "\n",
    "#所有方法：array, zeros, zeros_like, ones, ones_like, empty, empty_like, arange, linspace, numpy.random.Generator.rand, numpy.random.Generator.randn, fromfunction, fromfile"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "#可以通过set_printoptions方法让ndarray打印时不省略元素"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a-b是[20 29 38 47]\n",
      "a**2是[ 400  900 1600 2500]\n",
      "10*np.sin(a)是[ 9.12945251 -9.88031624  7.4511316  -2.62374854]\n",
      "a<35是[ True  True False False]\n",
      "a*b是[  0  30  80 150]\n",
      "A*B是[[2 0]\n",
      " [0 4]]\n",
      "A@B是[[5 4]\n",
      " [3 4]]\n",
      "A.dot(B)是[[5 4]\n",
      " [3 4]]\n"
     ]
    }
   ],
   "source": [
    "#Basic Operations\n",
    "#基础数学运算都在元素层面上进行\n",
    "a = np.array( [20,30,40,50] )\n",
    "b = np.arange( 4 )\n",
    "print(\"a-b是{}\".format(a-b))\n",
    "print(\"a**2是{}\".format(a**2))\n",
    "print(\"10*np.sin(a)是{}\".format(10*np.sin(a)))\n",
    "print(\"a<35是{}\".format(a<35))\n",
    "print(\"a*b是{}\".format(a*b))\n",
    "\n",
    "#矩阵乘法\n",
    "A = np.array( [[1,1], [0,1]] )\n",
    "B = np.array( [[2,0], [3,4]] )\n",
    "print(\"A*B是{}\".format(A*B))\n",
    "print(\"A@B是{}\".format(A@B))  #矩阵乘法\n",
    "print(\"A.dot(B)是{}\".format(A.dot(B)))  #矩阵乘法\n",
    "\n",
    "#+=，*=等运算符进行原地运算（需要加同类型的，如果不能强制转换就会报错）\n",
    "\n",
    "#不同dtype的ndarray间运算的转换逻辑是upcasting"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a是[20 30 40 50]\n",
      "a.sum()是140\n",
      "a.min()是20\n",
      "a.max()是50\n",
      "\n",
      "b是[[ 0  1  2  3]\n",
      " [ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "b.sum(axis=0)是[12 15 18 21]\n",
      "b.min(axis=1)是[0 4 8]\n",
      "b.cumsum(axis=1)是[[ 0  1  3  6]\n",
      " [ 4  9 15 22]\n",
      " [ 8 17 27 38]]\n"
     ]
    }
   ],
   "source": [
    "#很多一元运算→ndarray类的方法\n",
    "print(\"a是{}\".format(a))\n",
    "print(\"a.sum()是{}\".format(a.sum()))\n",
    "print(\"a.min()是{}\".format(a.min()))\n",
    "print(\"a.max()是{}\".format(a.max()))\n",
    "print()\n",
    "\n",
    "b = np.arange(12).reshape(3,4)\n",
    "print(\"b是{}\".format(b))\n",
    "print(\"b.sum(axis=0)是{}\".format(b.sum(axis=0)))  #这个axis我一直没太搞懂，就按照消融维这个逻辑来吧\n",
    "print(\"b.min(axis=1)是{}\".format(b.min(axis=1)))\n",
    "print(\"b.cumsum(axis=1)是{}\".format(b.cumsum(axis=1)))  #cumulative sum"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "B是[0 1 2]\n",
      "np.exp(B)是[1.         2.71828183 7.3890561 ]\n",
      "np.sqrt(B)是[0.         1.         1.41421356]\n",
      "np.add(B, C)是[2. 0. 6.]\n"
     ]
    }
   ],
   "source": [
    "#Universal Functions：逐元素的\n",
    "B = np.arange(3)\n",
    "print(\"B是{}\".format(B))\n",
    "print(\"np.exp(B)是{}\".format(np.exp(B)))\n",
    "print(\"np.sqrt(B)是{}\".format(np.sqrt(B)))\n",
    "C = np.array([2., -1., 4.])\n",
    "print(\"np.add(B, C)是{}\".format(np.add(B, C)))\n",
    "\n",
    "#所有方法：all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor, inner, invert, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var, vdot, vectorize, where"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a是[  0   1   8  27  64 125 216 343 512 729]\n",
      "a[2]是8\n",
      "a[2:5]是[ 8 27 64]\n",
      "a[:6:2] = 1000之后的a是[1000    1 1000   27 1000  125  216  343  512  729]\n",
      "a[ : :-1]是[ 729  512  343  216  125 1000   27 1000    1 1000]\n",
      "\n",
      "b是[[ 0  1  2  3]\n",
      " [10 11 12 13]\n",
      " [20 21 22 23]\n",
      " [30 31 32 33]\n",
      " [40 41 42 43]]\n",
      "b[2,3]是23\n",
      "b[2][3]是23\n",
      "b[0:5, 1]是[ 1 11 21 31 41]\n",
      "b[ : ,1]是[ 1 11 21 31 41]\n",
      "b[1:3, : ]是[[10 11 12 13]\n",
      " [20 21 22 23]]\n",
      "b[-1]是[40 41 42 43]\n",
      "\n",
      "c是[[[  0   1   2]\n",
      "  [ 10  12  13]]\n",
      "\n",
      " [[100 101 102]\n",
      "  [110 112 113]]]\n",
      "c[1,...]是[[100 101 102]\n",
      " [110 112 113]]\n",
      "c[...,2]是[[  2  13]\n",
      " [102 113]]\n"
     ]
    }
   ],
   "source": [
    "#Indexing, Slicing and Iterating\n",
    "\n",
    "#一维数组的情况\n",
    "a = np.arange(10)**3\n",
    "print(\"a是{}\".format(a))\n",
    "print(\"a[2]是{}\".format(a[2]))\n",
    "print(\"a[2:5]是{}\".format(a[2:5]))\n",
    "a[:6:2] = 1000\n",
    "print(\"a[:6:2] = 1000之后的a是{}\".format(a))\n",
    "print(\"a[ : :-1]是{}\".format(a[ : :-1]))  #ndarray反转\n",
    "for i in a:\n",
    "    pass  #总之是可以迭代的\n",
    "print()\n",
    "\n",
    "#多维数组的情况\n",
    "#它每一维都有索引，在切片时没写的维度视作全部（:（一个维度）或...（任意多所需维度））\n",
    "def f(x,y):\n",
    "    return 10*x+y\n",
    "b = np.fromfunction(f,(5,4),dtype=int)\n",
    "print(\"b是{}\".format(b))\n",
    "print(\"b[2,3]是{}\".format(b[2,3]))\n",
    "print(\"b[2][3]是{}\".format(b[2][3]))  #这个是我自己写的\n",
    "print(\"b[0:5, 1]是{}\".format(b[0:5, 1]))\n",
    "print(\"b[ : ,1]是{}\".format(b[ : ,1]))\n",
    "print(\"b[1:3, : ]是{}\".format(b[1:3, : ]))\n",
    "print(\"b[-1]是{}\".format(b[-1]))\n",
    "print()\n",
    "\n",
    "c = np.array( [[[  0,  1,  2],               # a 3D array (two stacked 2D arrays)\n",
    "                 [ 10, 12, 13]],\n",
    "                [[100,101,102],\n",
    "                 [110,112,113]]])\n",
    "print(\"c是{}\".format(c))\n",
    "print(\"c[1,...]是{}\".format(c[1,...]))\n",
    "print(\"c[...,2]是{}\".format(c[...,2]))\n",
    "\n",
    "for element in b.flat:  #对所有元素的迭代器\n",
    "    pass\n",
    "\n",
    "#其他相关方法：newaxis, ndenumerate, indices"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Shape Manipulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a是[[3. 7. 3. 4.]\n",
      " [1. 4. 2. 2.]\n",
      " [7. 2. 4. 9.]]\n",
      "a.shape是(3, 4)\n",
      "\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[3., 7., 3., 4.],\n",
    "       [1., 4., 2., 2.],\n",
    "       [7., 2., 4., 9.]])\n",
    "print(\"a是{}\".format(a))\n",
    "print(\"a.shape是{}\".format(a.shape))\n",
    "print()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Changing the shape of an array"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a.ravel()是[3. 7. 3. 4. 1. 4. 2. 2. 7. 2. 4. 9.]\n",
      "a.reshape(6,2)是[[3. 7.]\n",
      " [3. 4.]\n",
      " [1. 4.]\n",
      " [2. 2.]\n",
      " [7. 2.]\n",
      " [4. 9.]]\n",
      "a.T是[[3. 1. 7.]\n",
      " [7. 4. 2.]\n",
      " [3. 2. 4.]\n",
      " [4. 2. 9.]]\n"
     ]
    }
   ],
   "source": [
    "#以下方法都不改变a这一原始ndarray\n",
    "print(\"a.ravel()是{}\".format(a.ravel()))  #抻平\n",
    "print(\"a.reshape(6,2)是{}\".format(a.reshape(6,2)))\n",
    "print(\"a.T是{}\".format(a.T))\n",
    "#元素顺序是C-style（也可以通过参数设置为FORTRAN-style）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3. 7. 3. 4. 1. 4.]\n",
      " [2. 2. 7. 2. 4. 9.]]\n"
     ]
    }
   ],
   "source": [
    "#改变a本身\n",
    "a.resize((2,6))\n",
    "print(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[3. 7. 3. 4.]\n",
      " [1. 4. 2. 2.]\n",
      " [7. 2. 4. 9.]]\n"
     ]
    }
   ],
   "source": [
    "#如果维度写成-1会自动计算这个维度的具体值\n",
    "print(a.reshape(3,-1))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Stacking together different arrays"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "np.vstack((a,b))是[[9. 7.]\n",
      " [5. 2.]\n",
      " [1. 9.]\n",
      " [5. 1.]]\n",
      "np.hstack((a,b))是[[9. 7. 1. 9.]\n",
      " [5. 2. 5. 1.]]\n"
     ]
    }
   ],
   "source": [
    "a = np.array([[9., 7.],[5., 2.]])\n",
    "b = np.array([[1., 9.],[5., 1.]])\n",
    "print('np.vstack((a,b))是{}'.format(np.vstack((a,b))))  #和row_stack相同\n",
    "print('np.hstack((a,b))是{}'.format(np.hstack((a,b))))  #和column_stack相似但不同（见下一个cell）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "np.column_stack((a,b))是[[4. 3.]\n",
      " [2. 8.]]\n",
      "\n",
      "a[:,newaxis]是[[4.]\n",
      " [2.]]\n",
      "np.column_stack((a[:,newaxis],b[:,newaxis]))是[[4. 3.]\n",
      " [2. 8.]]\n",
      "np.hstack((a[:,newaxis],b[:,newaxis]))是[[4. 3.]\n",
      " [2. 8.]]\n",
      "\n",
      "np.column_stack((a,b))是[[4. 3.]\n",
      " [2. 8.]]\n",
      "np.hstack((a,b))是[4. 2. 3. 8.]\n"
     ]
    }
   ],
   "source": [
    "from numpy import newaxis\n",
    "#函数column_stack会将一维数组视作列堆叠成二维数组，堆叠二维数组时和hstack结果一样\n",
    "\n",
    "#二维数组一样\n",
    "print('np.column_stack((a,b))是{}'.format(np.column_stack((a,b))))\n",
    "print()\n",
    "\n",
    "print('a[:,newaxis]是{}'.format(a[:,newaxis]))  #将a转化为二维列向量\n",
    "print('np.column_stack((a[:,newaxis],b[:,newaxis]))是{}'.format(np.column_stack((a[:,newaxis],b[:,newaxis]))))\n",
    "print('np.hstack((a[:,newaxis],b[:,newaxis]))是{}'.format(np.hstack((a[:,newaxis],b[:,newaxis]))))\n",
    "print()\n",
    "\n",
    "#一维数组不一样\n",
    "a = np.array([4.,2.])\n",
    "b = np.array([3.,8.])\n",
    "print('np.column_stack((a,b))是{}'.format(np.column_stack((a,b))))\n",
    "print('np.hstack((a,b))是{}'.format(np.hstack((a,b))))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In general, for arrays with more than two dimensions, hstack stacks along their second axes, vstack stacks along their first axes, and concatenate allows for an optional arguments giving the number of the axis along which the concatenation should happen."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 0, 4])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#r_和c_可以沿某一维度堆叠数字为一个ndarray\n",
    "np.r_[1:4,0,4]\n",
    "#如果用ndarray作为参数，就跟vstack和hstack差不多，但是可以定义维度"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Splitting one array into several smaller ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[array([[6., 7., 6., 9.],\n",
      "       [8., 5., 5., 7.]]), array([[0., 5., 4., 0.],\n",
      "       [1., 8., 6., 7.]]), array([[6., 8., 5., 2.],\n",
      "       [1., 8., 1., 0.]])]\n",
      "\n",
      "[array([[6., 7., 6.],\n",
      "       [8., 5., 5.]]), array([[9.],\n",
      "       [7.]]), array([[0., 5., 4., 0., 6., 8., 5., 2.],\n",
      "       [1., 8., 6., 7., 1., 8., 1., 0.]])]\n"
     ]
    }
   ],
   "source": [
    "#hsplit水平方向切割\n",
    "a=np.array([[6., 7., 6., 9., 0., 5., 4., 0., 6., 8., 5., 2.],\n",
    "            [8., 5., 5., 7., 1., 8., 6., 7., 1., 8., 1., 0.]])\n",
    "\n",
    "print(np.hsplit(a,3))  #平均切成三份\n",
    "print()\n",
    "print(np.hsplit(a,(3,4)))  #在第三列、第四列后面切开\n",
    "\n",
    "#vsplit垂直方向切割\n",
    "#array_split可以沿任一方向切割"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Copies and Views"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "c is a? False\n",
      "c.base is a? True\n",
      "c.flags.owndata? False\n",
      "\n",
      "[[ 6. 10. 10.  9.  0.  5.  4.  0.  6.  8.  5.  2.]\n",
      " [ 8. 10. 10.  7.  1.  8.  6.  7.  1.  8.  1.  0.]]\n",
      "\n",
      "d is a? False\n",
      "d.base is a? False\n",
      "[[ 6. 10. 10.  9.  0.  5.  4.  0.  6.  8.  5.  2.]\n",
      " [ 8. 10. 10.  7.  1.  8.  6.  7.  1.  8.  1.  0.]]\n"
     ]
    }
   ],
   "source": [
    "#直接分配，通过函数调用可变object（这种情况下函数传参是直接引用的），都是没有复制直接引用\n",
    "\n",
    "#View or Shallow Copy\n",
    "c=a.view()\n",
    "print('c is a? {}'.format(c is a))\n",
    "print('c.base is a? {}'.format(c.base is a))  #c is a view of the data owned by a\n",
    "print('c.flags.owndata? {}'.format(c.flags.owndata))\n",
    "#改变c的形状（reshape）不会改变a的形状，但是改变c的数据会改变a的数据\n",
    "print()\n",
    "\n",
    "#slicing相当于返回一个view\n",
    "s = a[ : , 1:3]\n",
    "s[:] = 10  #s[:] is a view of s.\n",
    "print(a)\n",
    "print()\n",
    "\n",
    "#Deep Copy\n",
    "d = a.copy()  #一个全新的ndarray，数据都是新建的\n",
    "print('d is a? {}'.format(d is a))\n",
    "print('d.base is a? {}'.format(d.base is a))\n",
    "d[0,0] = 9999\n",
    "print(a)\n",
    "#如果有中间变量的一部分需要被复制，建议先切片后调用copy方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Functions and Methods Overview\n",
    "全列表：https://numpy.org/doc/stable/reference/routines.html#routines  \n",
    "**Array Creation**  \n",
    "arange, array, copy, empty, empty\\_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones\\_like, r\\_, zeros, zeros_like\n",
    "\n",
    "**Conversions**  \n",
    "ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat\n",
    "\n",
    "**Manipulations** \n",
    "array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize, squeeze, swapaxes, take, transpose, vsplit, vstack\n",
    "\n",
    "**Questions**  \n",
    "all, any, nonzero, where\n",
    "\n",
    "**Ordering**  \n",
    "argmax, argmin, argsort, max, min, ptp, searchsorted, sort\n",
    "\n",
    "**Operations**  \n",
    "choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum\n",
    "\n",
    "**Basic Statistics**  \n",
    "cov, mean, std, var\n",
    "\n",
    "**Basic Linear Algebra**  \n",
    "cross, dot, outer, linalg.svd, vdot\n",
    "\n",
    "# Less Basic\n",
    "## Broadcasting rules\n",
    "如果universal functions的输入参数拥有不同的shape：对不同维数组，用1扩充较小的数组；某一维度上如果只有一个元素，让它表现得像在这个维度上有一组相同元素（长度为该维度最长长度）。广播规则的更多细节见：https://numpy.org/doc/stable/user/basics.broadcasting.html#basics-broadcasting  \n",
    "\n",
    "# Advanced indexing and index tricks（用整数列表和布尔列表来索引）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a[i]是[ 1  1  9 64 25]\n",
      "\n",
      "a[j]是[[ 9 16]\n",
      " [81 49]]\n"
     ]
    }
   ],
   "source": [
    "#整数列表索引\n",
    "a = np.arange(12)**2\n",
    "i = np.array([1, 1, 3, 8, 5])\n",
    "print('a[i]是{}'.format(a[i]))\n",
    "print()\n",
    "\n",
    "j = np.array([[3, 4], [9, 7]])\n",
    "print('a[j]是{}'.format(a[j]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[  0,   0,   0],\n",
       "        [255,   0,   0],\n",
       "        [  0, 255,   0],\n",
       "        [  0,   0,   0]],\n",
       "\n",
       "       [[  0,   0,   0],\n",
       "        [  0,   0, 255],\n",
       "        [255, 255, 255],\n",
       "        [  0,   0,   0]]])"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#对多维数租进行索引：标量索引对应数组第一个维度的对应数据\n",
    "#一个图片的示例\n",
    "palette = np.array([[0, 0, 0],         # black\n",
    "                    [255, 0, 0],       # red\n",
    "                    [0, 255, 0],       # green\n",
    "                    [0, 0, 255],       # blue\n",
    "                    [255, 255, 255]])  # white\n",
    "image = np.array([[0, 1, 2, 0],        # each value corresponds to a color in the palette\n",
    "                  [0, 3, 4, 0]])\n",
    "palette[image]                         # the (2, 4, 3) color image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "a是[[ 0  1  2  3]\n",
      " [ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "\n",
      "a[i, j]是[[ 2  5]\n",
      " [ 7 11]]\n",
      "\n",
      "a[i, 2]是[[ 2  6]\n",
      " [ 6 10]]\n",
      "\n",
      "a[:, j]是[[[ 2  1]\n",
      "  [ 3  3]]\n",
      "\n",
      " [[ 6  5]\n",
      "  [ 7  7]]\n",
      "\n",
      " [[10  9]\n",
      "  [11 11]]]\n"
     ]
    }
   ],
   "source": [
    "#用多维索引对多维数组进行索引：对每一维度切片的索引数组必须有相同的shape\n",
    "a = np.arange(12).reshape(3,4)\n",
    "print('a是{}\\n'.format(a))\n",
    "i = np.array([[0, 1],                     # indices for the first dim of a\n",
    "              [1, 2]])\n",
    "j = np.array([[2, 1],                     # indices for the second dim\n",
    "              [3, 3]])\n",
    "\n",
    "print('a[i, j]是{}\\n'.format(a[i, j]))    # i and j must have equal shape\n",
    "print('a[i, 2]是{}\\n'.format(a[i, 2]))\n",
    "print('a[:, j]是{}'.format(a[:, j]))      # i.e., a[ : , j]\n",
    "#最后这个应该就是(2×2)矩阵，每个元素位置上放一个a[:,n]的向量。但是为什么是这个方向我有点没看懂，但是我能想象它的立体排布\n",
    "\n",
    "#arr[i, j] is exactly the same as arr[(i, j)]\n",
    "\n",
    "#不能这样把i和j叠起来做索引：s=np.array([i, j])\n",
    "#但是可以用tuple(s)作为索引，效果等如[i,j]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 20.    51.25  82.5  113.75 145.  ]\n",
      "[[ 0.          0.84147098  0.90929743  0.14112001]\n",
      " [-0.7568025  -0.95892427 -0.2794155   0.6569866 ]\n",
      " [ 0.98935825  0.41211849 -0.54402111 -0.99999021]\n",
      " [-0.53657292  0.42016704  0.99060736  0.65028784]\n",
      " [-0.28790332 -0.96139749 -0.75098725  0.14987721]]\n"
     ]
    }
   ],
   "source": [
    "#找最大元素的索引\n",
    "time = np.linspace(20, 145, 5)                 # time scale\n",
    "data = np.sin(np.arange(20)).reshape(5,4)      # 4 time-dependent series\n",
    "print(time)\n",
    "print(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[2 0 3 1]\n"
     ]
    }
   ],
   "source": [
    "# index of the maxima for each series\n",
    "ind = data.argmax(axis=0)\n",
    "print(ind)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[ 82.5   20.   113.75  51.25]\n"
     ]
    }
   ],
   "source": [
    "time_max = time[ind]\n",
    "print(time_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0.98935825 0.84147098 0.99060736 0.6569866 ]\n"
     ]
    }
   ],
   "source": [
    "data_max = data[ind, range(data.shape[1])] # => data[ind[0],0], data[ind[1],1]...\n",
    "print(data_max)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "True\n"
     ]
    }
   ],
   "source": [
    "print(np.all(data_max == data.max(axis=0)))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[0 1 2 3 4]\n",
      "[0 0 2 0 0]\n",
      "[2 1 3 3 4]\n",
      "[1 1 3 3 4]\n"
     ]
    }
   ],
   "source": [
    "#用整数列表索引来赋值\n",
    "a = np.arange(5)\n",
    "print(a)\n",
    "a[[1,3,4]] = 0\n",
    "print(a)\n",
    "\n",
    "#用列表索引赋值时，如果列表索引有重复，只会留下最后的赋值（因为会运行多次赋值工作）\n",
    "a = np.arange(5)\n",
    "a[[0,0,2]]=[1,2,3]\n",
    "print(a)\n",
    "\n",
    "#但是如果用+=：\n",
    "a = np.arange(5)\n",
    "a[[0,0,2]]+=1\n",
    "print(a)\n",
    "#对这种现象的解释是：Even though 0 occurs twice in the list of indices, the 0th element is only incremented once. This is because Python requires “a+=1” to be equivalent to “a = a + 1”.\n",
    "#……啊？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0  1  2  3]\n",
      " [ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "[[False False False False]\n",
      " [False  True  True  True]\n",
      " [ True  True  True  True]]\n",
      "[ 5  6  7  8  9 10 11]\n",
      "[[0 1 2 3]\n",
      " [4 0 0 0]\n",
      " [0 0 0 0]]\n"
     ]
    }
   ],
   "source": [
    "#布尔列表索引\n",
    "#情况1：索引数组和原数组拥有同样的shape\n",
    "a = np.arange(12).reshape(3,4)\n",
    "print(a)\n",
    "b = a > 4\n",
    "print(b)\n",
    "print(a[b])\n",
    "a[b] = 0\n",
    "print(a)  #可以直接用以赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x2cf82a71088>"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n",
       "<!-- Created with matplotlib (https://matplotlib.org/) -->\r\n",
       "<svg height=\"252.045544pt\" version=\"1.1\" viewBox=\"0 0 257.9275 252.045544\" width=\"257.9275pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n",
       " <defs>\r\n",
       "  <style type=\"text/css\">\r\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\r\n",
       "  </style>\r\n",
       " </defs>\r\n",
       " <g id=\"figure_1\">\r\n",
       "  <g id=\"patch_1\">\r\n",
       "   <path d=\"M 0 252.045544 \r\n",
       "L 257.9275 252.045544 \r\n",
       "L 257.9275 0 \r\n",
       "L 0 0 \r\n",
       "z\r\n",
       "\" style=\"fill:none;\"/>\r\n",
       "  </g>\r\n",
       "  <g id=\"axes_1\">\r\n",
       "   <g id=\"patch_2\">\r\n",
       "    <path d=\"M 33.2875 228.167419 \r\n",
       "L 250.7275 228.167419 \r\n",
       "L 250.7275 10.727419 \r\n",
       "L 33.2875 10.727419 \r\n",
       "z\r\n",
       "\" style=\"fill:#ffffff;\"/>\r\n",
       "   </g>\r\n",
       "   <g clip-path=\"url(#pa1f3eead6a)\">\r\n",
       "    <image height=\"218\" id=\"image70fac1d4ac\" transform=\"scale(1 -1)translate(0 -218)\" width=\"218\" x=\"33.2875\" xlink:href=\"data:image/png;base64,\r\n",
       "iVBORw0KGgoAAAANSUhEUgAAANoAAADaCAYAAADAHVzbAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJztnX1wG/W5779aS4plra04IbbiUJNYOJCQF3BCgSYGt9AGOOYMPS01tHNpPB5zkrR3OO29c9ue8Z0eZjL39J57ph3u8J7rSdoZphhu72WmngB9uXVrUwqYQBKSQIyc1hDHdl4cWavI0cvq/rH+/bRa7Uq7q93V235mNHEsabWS96vn+T2/58Vxj+PrKdjY2JgKU+wTsLGpBmyh2dhYgC00GxsLsIVmY2MBttBsbCzAFlqFUdPYiJrGxmKfho0EZ7FPwCYTo0RS6HGS8/OGnIeNgC20IlAOFifXOdoi1I4tNBMpB0HpQel92QJUxhaagVSqsNQiff+28NLYQtNJtYtKDbbw0thRRx3YItNHNX9utkVTSTVfJEZSrVbOFpoCtrCsQfw5V7LobKFJsAVWPCpZdLbQYIurFCF/k0oRXFULzRZYbhyNPl3PS82HDDuHSrFyVSs0W2TZ6BVWruMYLbpyFVtVCc0WVyZGCUvLaxQqvHJ1KatCaLbA0ugVV7LRq+pxNfMRTa+vV3jl5lJWtNBsgRVutYjAIq0sAMAdStD7XKFFxcfnE5z0/AqxdOVg5SpSaLbAjBMYAMR9tZhfX4NIII6mUTfcHA8A4NY0oPHkQs7naxUcUJiVK1WxOSqp3ZwtMGPWXVKRAUDM50SMZXDpviiWHa1DnE2h7pwD7Lkk3KGErHUTo1ZwYgpdz5WS6Com17HaReZo9BkuMilujseyo3V46rHn8Pw3n4c7nP6OJoI0EiuCNVZRERatmkVm5MUoJzKxRQOAGMvg8nrhvuWnQd3IfGs3QJ9VAyrDspX1Gq2aBQaYLzIx7lCCig0AEmwKsXoGAEPFRpBaNyK8ZKNXl9gKDZiUQrCkLIVWzQIzw51SG7oXwzQvYgG1cHIOLD/NAHBmWDUxRHiu0KJusQHlLbiyW6PZIjMWLSIjQnJxDhy47RcI9jwHAIi0OBBjGSFgonCbfJihgtMjbDGFfg7FuIbKxqLZArMeqQtIXEf3jovof/tR1LNR8IEorgIA6oBp4Xtb6krGWAZO9ipivmUAagu2bIDwmRS692alZSsLi2aLzBz0WBY3xyNydAWYoAfzMw3Y2RZEPRvNeEyMZTJukRYHmKAHMVa43KrRspW80KpVZEaF65XQepGLo4515xyoO+eAe9aJsckA7m89iaceew6xege9ffk/jSHS4sDl9cDVrVeQYFN4+78/a/j7KBexlazQqrnjrtmuYqGWhOyfuTgHEpwL99SfwM/P78CV1SnE64Erq1M4PLURTz32HD7uexZtzRfQMMGg8zv/SI9hlFUDjBGb2ddaSQqtWgUGlI7IxOszcVhfjCsMMJEa9P6+Dzt9E+ADUUQCcXzcJ1iu3t/3ITC0B2d/05qxua33nHJhxOdm5nVXchvW1SoyqwIehQqNrLNi9Q7E64E4K1w+fCCKia5DGJjbjKGT28AEPXBxDrjCggWU29gGMje3CwmOEIyqfzM6UFIyFq1aXUWz12JijLRmUhKcCwAwdHIb+NlauDiHaeeXC6M+S6OvxZIRmo256LmIpSIj1kyO9YFzAJAVgcx3TCmlJDYjKQmh2ZbMXLRcvErJwWKRid3GBJtCrDmBA+0vAQBevXlQOA6rvCIpF7EZ6WUVXWjVKjKr0CsyuXUZkBZZ1M/j475n4QvMo9G/gN9GrgcA9E88DN6bRIJNIRKIyx5D6TX1nrcSpeRGFjUYYovMXAoVWYxlEKvPXGsRkZH0KwAYiTLo8qSzQXqnOnGwdRTtI7ux7GgdvNPpS0ycNUJTukyoZRNTCgGSoli0agx8WOkqAsaJ7O8eG6X7Y+IoY/vIbvROdQJAhsgA4GDrKABgousQgKVcyCXBkmwRs96LHKVg2SwXWrUJDLB+cV6IyGjq1JKLOHRyG57/5vOI+nlE/TwSbAq8N4l6NkoFJUfHeA/WDfdTYcbrBbeTZItwq2uoqNUUjSYbvYa4k4Wi9/otm6TicqVcREYgAgMEF9HHRtHmWgDvTdLHkAij1GWU4mTjSERq6P+jfkF0TPMi4lwdcE71qVIKqWkzyoXUk5BsqdCqzZqVqshkBbZkzW5+9DieaHkNANDqZDGV4DAZb0CjfwFhzoO25gt4Y8Nw3tfY2jSNne0T+Mn79yIB4fXuvOMEdvom8PTEXUiF6zS8s0wKzfw3Aq1isywYYovMPAoRGJC5Lou0OBD18+C9STjZOF1nEeuVz4pJ6Z3qxNhkAPVsFEe2D6F9ZDf42Vo0TDA0Y0RtUESOYjT9EaNWbDVtjo3/YtirKr1IFYnM0eiDw2N8oxol1Igs7qsFXyvvvIjD+Em3A4ADyy45wDsYJONOfPXGEfgYN9a6hO9j8q9aOrwn8V/bTuJTJ4MveefgbZzBoW0j+OzGRUy+1YqaWArJWgY1V3nwtU7wtU7UXJWv1JYj5XEj5XGDWYznfzBh8aqm95ALxuNBajH/F4SpFq2aBAaUnquYL8iglMMIpCOMa7/wqSpXUQ2DIT/2jz4AAHDPOhWb+wDmWzcjrRqQ37IVfcO6UrDaVVQSWdxXS2+5UMrOEGfZJ9gUzke8GIkac5l82fsJ3LNOeIMu1J3L3J+Tno+e9nVaAkFG/73yGRXThFZt1swqcl1Mai9OtYnCvsA8VnkjaHPJdyPWyt1j3zXkOLkohS0AOUyJOlaTyEoh6KHl2z+fyKjryKZw+OZBtDpZAKzq4ysxGPKjno0ixC51xAqnN7CJ+xjzZXbSEnfP0oLWduRGkSsSabuOBWBlUrBSc1MjRCaXqfFx37N44dId6k8yD32+GRzZPoQ77ziBhMaEY7XusJR81s2Mv5+SkTE8GFIt1swKkVliwSQJw0A6EBJrTqBry0c5M0C0MBjyo883gxsG9wo9R8LyOZBAdnAkF4XmShodGAGygyOGCq0aRFYOAlO7BlMSGZAugREnDxfCSJRB/9uP0sprALT6mlCI2KRIxZdLbGYIDcgUm2FrNFtkhaMm0KHG/ZNesLkeK87OJyIzA/Emd5xNUbHF6tOWTfoeaB9JHYITfynl6yNpZHqWEvYarUTQKzKSBHx5PbIy5KVrL/HvSFu4fHSM9xgS3h+Y20zbHUhRcx5aiPmc4Na4wa1xI+ZzGtpxSwti42OIRat0a2aWJVOb1QFAuGjqHXDcexGp11emrcBSEvDHfc9gYG4z9jcdx20/2EufnyU2UdKw7OstBSpIln6Y82hKuVJi6OQ2elwn51h6HaF5DzkvwkI7D89MDbzTqQzLBihbN+nmO/ms8MoKCJd57g7JZlu1gr+qbJFpR03JhzjKFvM5EWkRasPCnAcL7TwiLQ4s3/0pFtqF8hUAWLfsPG4Y3Evrv+RuC+08Pnz8GUQCcTz4yCjcOy4izqYQZ1O0DIaIDBB6gOw61Y3BkF/3++2d6kQ9G4WTFdKkyGtc3Xols9Zt6cY0L+LBR0bTPf3Fllihtz9B/MUSCjZirjOhukOymVFIu0xGAaM/9EILMb3TKfzyDztw5x0ncLBrFCNRBsFYE14GaIrU0xN3KR9TYsXOdB8AAOxvOo51M/0AgIHOX6PPNwNAcBm/0/5HjIXasab2MgBgKsEt7aupZyTKCM9vAqa9Pty68W84PLURYc6Dia5DmNrJ4Yu/+s9wcg7EmhM4032AWuZ3v3Idzv6mlVZoE8EorUGlrfB8gXnMzzRkrkN9xvT+10JNY2NhUcdKtWZWzh2TojRYQppZT4RC6BjvQZjzgJ8Vnu/kHFkt36QtCABBPA9+0IdV3ohhOY1qIKF+wrrhfjT6F7LOIzC0Bw0TSwLL0YSVQEQWCcRxpvsAOsZ74HplhWyVgJLQzHAhdWfv2yJTJtnopVnlWpAL3ydrhYss6XYgXu9Agk0h5U7h5s99QDPpR6IMrl9+AahzwLUihv9x20u45K9F8PIqAADvFm6JxiReS7bgP6w6TY/vY9z4x5YT+Bz7iebM/ELoqOXozwNzm3G1tgZjW/9vxrkBwOObxvHU+7eiJgYklzny3sgeYJLlcWF5HEPt/w//63e3CpUJjAM1V3laHaCY9W9gdj9Bt0WrNKEVKrBCI1pKxZj0Z5bBhY6U4Dq2jtI1k9gqAJlVz1MJDne9/j0wS1XOTPOi6sLNUmAkyqD3931wzzqzrDOxWOuG+3Gm+wBuGNwL11KQhWSeBHueQ2BoDzwzDFxh4PLNcTSNOsGejeXskGyGRdMVDKk0kRWKVWHj67d8RrM0xkLtOHN1VdZjxBHC/omH4WTj4L1JKrIWr7n7RUYi3XsTQ748iAv9cd+zGY8hwRzem0TUz+PKavX2xIygSNUHQ/R+qEaJS0s61dnftCJwbA8AwTrtbAvmfPwbG4axC904z3pxZPtQQedZDAbmNqPRv4Aj3UJldjzooffx3iR2nerGj9YeRpeHx65T3eADUdSzUYQ5D3xLHZO/9fm/4J76E/j+iYeAoyuK9Va0u46VZM30iMxI65VLZPkGS8SaE1gfOJfXDRwM+XHm6irsbzpuzEkXkXXDQnSUtFiQRkFJgEXabmHdcD+8QRfdl3OHEqpStIx0ITVZtEoRmVaBmeEa6ilsFONk46rWWsIabibv48oBcYMgAFlbDWS9SkTWO9WJo3MtdA2XC7PD/VWVgqWliSnZVC6GyJQ2YMUcuO0Xhp5TOXBk+xB2tgVVB3MOto4iFGxEYGgP+EA0bw6omah2HcvdmmkRmJmosWRqenmQzV0beQbmNuPFd26HN+jKmNGWq+OWme5jVVg0NSIrlU64YnK1zmYiNegY77HwbMqLdy9eByD3VBsrUWXRytWaqRWYFWitJctVkAkI+YIk8vhEy2uaU6MqHXFA5LYf7M2wZgQrrVpFhvdLSWBA4SITF2MSeG+ShrBtsiEi2/TkPnhRfKtWUULLJ7BiuIZ6RCa2YO4dF/Hh9iGsG+7PyPA4s9RBWMC2ZmJI3icT9KAunP69tPmPWowoockrtHJwGytBYEA6cfjq1ivgZ2vxz/e+ipentwMQQtvzMw1wsvG842urmY7xHoSCjbJJ1cWkbC2aHvdQWt5uBoU2zokE4jjTdYiuMfp8w5hKcPjpTa+gaztPZ5LZZLPrVDfmZxrgziEwsVUjJTNWkDPqWKrWTKvI5FqV6W1hlotCREZcRm/QhY7xnozMhlYnS///7VVvYqdvwpgTrjBuXfk3YVSUCZHGQvMfc0YdS01oWgQW99UW1NxF7TedVqEq9f0A0oGPDx9/RtMxbTIhqVpMpIZOrQHUj/U1o06tpIWm5VtEasFIjw0ge7PSanK1f1MaxG5Um7dqQxzW7xjvQezNlZpnaFsqtGKJrNBEX3Gfjfn1NYgEhMK+5R+44A6nwJ6NGXOiCqjtqQgoN84hmR/i+WQ2+tj05L6s/pEELQnGQGFCk70qrBaZUaUqUjdO+CZzIRKIo+lrU5j7VSu4Ne6i5rwR1AxMV2rPZqOO9pHdYJa6bQm3NKQI1K1BO4WE+YuSgkWSe7Uk+YrRki7lnU6BidTgfCT9eDUXuRjShWn6Tocw5FymZ6LW42X9TrQxnWBTcLJxONm4HWUsgHo2ilhzAh8+/kxGt60rq4XP99J90Yy+j2ZiudCK0TLgzjtOYJU30x1QKxRxoOKRL76Z0U2qELEpQdZnbc0X0NZ8wbC+99XIKm+EtrgjFdjELZ/oOoQf3vK6ZediyT6aUaXhemaDRVocGDl2IwDAWw8A2S2o5VxJqYji9cCL79yOM48/g1v271N1jHzHpL+XCYL8aO3hvMezyc03WsbRtyFdi8cHhI3+rrYg2kd2gx2rA4ukJeeSJTSj1mfFbNlGuLwe8G69iAdbT+LFd24HQPobSjc0lS0TEcGar0yhxRsSmr2IjpFPcPmsnnge2R++9u8g6VRGdAeudqSNiya6DtEq7I65FoTaa8GeE+5Tu3mtd51muEUrZuNRMTGWQd05B2LcSgxx2/Ctz/8Fv4zsgJNLL4xdYeKzC89xcekW1QTiKr6xYRgd4z3gvUnEWeEYrrBc33iVLqnMcIn+iYfLpkNVuULEt8obQWxmJVAsi6aHYvamB5SbjrrDKbjDQJz1ABvTnWv5pZB/dLYWTs6BtV/4FJ8cu3bp2WmxictSANAGN+0ju7Gm+QJOB1fDG0xHBuNsCldWywtW8dxFa77TwdXYhW5bbBbwybFrcc10yrK91Yx9NK1uY7EFRsjV3RcQ1mlxNkW7JK3yRnCg/SUAwIMf9GFr0zQAYOTYjTRD3inKlyO96Bv9C/hO+x8z2mZHljoriSueSY/BfGITiyzq58E0L9IWBbbraA69U5348283oe6cA+y5ZIbQ8nUwJuhxHauiwtoVFqwMP1uL+ZkGnA6uxo+n70Ork8X9rSdpZM/JxnH9ls/ANCv76mK//6c3vYJYcwIJNoWDdw9iYG4z2kd201y7nFNbZO6b6DqELg9vi8wEphJchsjUtBdXQo+B0eU6loolkyNXZoZnhkGcFdpqP9HyGgZD19M2bAdbRzFQexn7m46jI9KD+WbBJXSycfCcC042Ti0focvDo2vLRxibDOB34ZuEwQwXr8NpbvXSOg4Qu6JAtsDioq66Nuaw61Q3dfPrFLJEzEaT62jmxEu9IlNyG+n/JYWU5MLmA9Gc7bE7xntwf+tJnF1cTn8nt6c1MLeZPkZ8PynUZJoXM8bJZpy7qC3B9Vs+s9dmJkJ6O4ob9QDQ5ToStLiQqi1aOYpMiQSbAs+50NKm/EHd33oS65adz9t4VOl+cXPTwOyenOcCAJOz12BkLWO7jSaT3t5hMrZizK5Lo1dmLmtWiiKTonpAenMCjf4FAPIWilBoZ1/xhjPvTSKBzCBLQtL/4862oC0ykxiJMnCyccRZ4RqJ+lNC+QyX54kGkjcYUg4iU0Jus5iJ1GBr0zR+etMrpr62WDRdWz7C4N+/gOu3fEaDJwTem4STjdupVibS5eEx0XUI3q2XwAeiGPz7F/D+QLrmz4oqazofjfF4ZB/g8JiXcKl1fpgYuamYUpJuR9b6jHcDn8YbcCKxBjH3QsacLrNY7v4MXR4eH6eW4fjZa5Fyp+iN5OLN1SXxJe+c6edSzXzqZNBYH8U/XfM3bHpyHzwXUxnz0giyM9Pk0DBHLae/VcrRRYKSyMTWTLrxnOBcOM96l8Yemd+Xnli3/U3Hcdi/EfMzDQBARVbPRitiCEWpI/6M1SYUGIWs66i3fEUNRohMXNwpBxHZ5fXAQjuf1XTUycZxf+tJPLbirYLPRStHtg+h0b+ARv8C6tn0BrqN+QzMbaY/u8OFZ4Vo0YilXbDMFpnYikVaHHBxwEMPjGHo5DYkOBeNBPZOdeKxFW8Vrbvv/a0nactqAGU1HLAcGQz5sX/0AXiDLryKTjq+yUoc9zi+nhJHHEs1+CFek3FrlNd24jUZIKQ2/eFr/15yLbPJ/tua2stYt+x8Vqa5jbGIR+yKe8hoac4jh9q9tAzXsRRFJm4JF/M5cenGZYi0OLKy5mP12b8jLuNdr3+v5CqVH1vxFnb6JrBu2XkE3HYQxGyY5kUc/s6/AVBXO2j461vxInpElqvnIilNJ+LKLlVJQ/atSi183upkEXDPIeCeQ5trodinU/H0bHwvw6uxuiNahutohkXLJzI9Q/kudAhBjWVH6+h90nxCaQCkrfkCDrS/VHIupI113DC4F8tPQ9ecNCXUuo70KrZCZEY0GyX0bHwPL3K3wz1LHiOUwki71DLNi7Lzjm2qB5LnuHy6eP09TXMd87XkzkXM55RNDgaEtZhnhsGL79yOri0f0UwLIrJgz3NgmhfBe5PgvUL1bO9Upy2yKmVgbjMO3j0oBEEkazOr+u4DJoT3xS25taKl+ah71omxyQAttmwf2Q0Ggqjq2SiwtD91PuLFt1e9qflcbCqD/U3HBZexCKUxYpyAvNuotLZS8l8LERigrm22XNCjd6oTB1tH0bPxPZxdXI6DraOYauEwGW9Am2sBP56+D8FYE7o8dvi82th1qht//fPnhEJPTvBuitUWPuvqzhe80NPyLR9qLJmcyMRzwsTpNa1OFq1OHgArCC/BwR7WV318o2UcP+Nai1LoKSXjCtcjopjPiRjL4PJ6oOmI/P5Erm+RfCITF24Son7hdcKcB0fRgpFVueu47PVZ9UGs2fJp+SJPo1Dbfo5e5UoiyyUw+nO9AwmWB7e6Buy57PZdahJ/s+4TtcgWQ5qMdoz3YJU3Ylcl28hCXEaUwPxqYElohYgMEPatnJwgjFhYqFzN1ZWXIDXp0l6HcTYF79ZLdFQqINRvdYz34Mj2IYxEGTtsb5MBCeUXqzeIEk4gLShxuDPSmnnxErMrzTO8vB6INcfR6F/Ake1DSzllNRkbyO5wKqPtNUCEqZzRQcL1R7YPYd1MP2JeoT3A5Ow1tEmO4C7aIrMRCAztgXcpn5FQCpODAJHryK1xA0vD+4gwCIJ1ETr/ErFQCxOI4oxohpcvMI8QGuHeMY/I0RV0zhc/K4j5+i2f4Rst49g/+gD4QBwJzoVG/wLCnAcJzoWBzl8DAJ6euItWQR+8exCAICy7r4aNFNLlKtfs6mJTFX0dbWyKjeMex9dTiS9tA1CI65iQuI6MKtdRrgUbQZzpQWYSE9dxZ1uw5JKEbYqP9NoTt5UDsqOOSpkhWnIdAXX5jo57HF9PObbdJHun2mDI/PoaxNkUXJyDFtWZFQwRi3okyqDNtWAHQ2wo0v6NABTD+1YKzUkOLBd5dIUWZcXmDiUyxOYKCy28hB34pTelsAgVt/iSijFTeMLEltibKyFuG5Rga3Bk+5Ad3reRRTz/QDwLr9ik+zrmEBuQbd3It0PM54Q7nIKTc8juoYkfm/175T02NwfgXPaGtSvMIDAkNCQNN3vQEenBT296xQ6Q2GSw9guf4q9//hzcFjfhUSLjKlcSG6BsZl0hwAug8aS+FCypdcy6n+MBZIpN6KGfgjcQxdam6bwis/faqo83NgxjsMWPnx36B2B6aW/X5zQ8O0RXKwNAEFsuH5XcL70B+ssO1Lx5ORcgzKWdyoG5zbRdwVSCo5vZvVOd+G3kel3nZVPevDy9XZhZnWO/1iqcgKBKaQa/1gWh9PFarVsuy0aCK9L9PSDdomDopBA57QVwdK4FAOwymSrnjQ3DwAZhveYOm2fV1GD4PhqxcK7QIr2pxR1KqP4QYs0J7GwLYt1wPwJDe8AEPeBna3GwdRRhzkPnoIU5D35+fofet2NT5gzMbcbz33y+6FaN9gwph1YG4p4hj3zxTbz4TrqVgYuzWxnYyENC/l6ZVgZW9Qyxm/PYVA3FbM5jegpWvpMWu5hy7iZxJ92hhOBj1zuEviBBjzAyN5zdR52M0gWEDJQE58IbG4ZLTmQjUYYGbWzMZWBuMz7ue7ZoLqQluY5aAysAcq7vNj25j84hJjcliCtZag1UpxIcgrEmBGNNmIw3FPt0Kp6hk9syvtC09KcxgoxXk4s+GkWuPbpciDfM3aEEVoQSsi3BidgyNrc5YV71H+/9WclZsxcu3UFbggOwe5qYDD9bi/uf/i9wQViCWF0+wwBAcn6e/kLLXF4rEVs49mxM8LMlNwBZFu6RL76Ju8e+i3XD/dh1qhuAYN2K6a4NzG3Guxevw3TEh3cvXoexUHvRzqUaGAz5aetBadW+3j43WqHD4sth0AVBy9imBJvKGGfLNAti7dn4XtEmynSM92T8387ZtIaBuc20idNtP9gL9mwMQHZAxNROxXJPNkNwel1IMSTZWWmTm2xwLz8NxOoZGoV0cg4kUAvem8ThqY0ACp9VrZWO8Z6sQYQ21iD+W8fqHQVvXmvx/nIGQ8xyI/OleWlBMWFZ5IOLo5CAcIGv8kawbtl5Q84hHyNR4WMemNtMRQYIk0cBIZVMPCTPxhzEaXpyjZ/MpGwrrKVbAEqQ9ZpYbDvbgvjR2sOWzST7+fkdGIkydPggE6mhNyI2e7Su+Rye2oixyQBGogw+fPyZ/E8wENk1WtaDSnTNpmZgvLjMJl4PRAJCIyFAGHNrFiPRdG+TdcP9YCI1AJCxXiTw3iS6tnxkV42bxEiUQf/bj4IJCknoCTaFhgkG7Lmk7Ma1Wm9Ll+sojjwWckCtmO1CZj1u1olQsBHzMw0599YG5jZjMOTXfT7/+tf76c9MpAZOzkFFBiDj/0ykhn7T2hhPl4dHgnPBtdQ+o2GCsbwgVPWuXanusYmtWr7aNoKTc4BvjmM6ovx+Dk9txP2tJ9E7lQ69y1kcMiJXev/p4GoEju0RhtMr9EehARo2hbbmC3bxqgWIR+uKiftqTZ0uo2l7vBSjkUrtFoDMVgnixW+CTeEPO5/KqlMj4V8SGXxx5nY4WaElnpONoxfZYju7uBxjkwH0bHwPgKj1GUl2nqnLysOk576UCO3kHHZ430TI/qmYQjettXp5unyV1HzIFHfSiGhkLhcy6ucRa06A9ybx4+n70OebodG+3qlODJ3chl2nuhHmPHDPOuGedYIJemjQgtS5EUaiDEaO3Qh+thb31J/AwNxmTM5eAyZSQ90U2TxM0e/I40h7BhvjeWPDMP54789w61eP05HMVlMViwKyj8Y0L6LRv4D1gXN4ouU1TCU4HJ7aSNdqCc6FT45dS5u9yiFet33/xENwzzrh5Bzo/X0f9jcdx0TXIbr2kopMjNx97SO7aaKxjbG0OoXJQl/48ocFi02PkaFRR0Ku6KPiQUxau6l1JaWuI5lwQ7i8HnjogTEcntqI+ZkGulHMz9bCyTmw9guf4pNj19K1FBGBuNzm475n6fHaR3ajrfkCTgdXwxt0pc9j6bFylkzx3OvTz401J7A+cM52Iy0gMLQH1xxx0OwQIB15zOdV6RGaISnM4hc2UnRq122yQRHWTZu28oErAIBQsBFuzgHXkjhcYeFC/+ufPwcnsgUi/Jz+5iNrN/esE2ePtmJ5lltI2pvlj2iRb1RyDgC2UnMNAAAQY0lEQVRskVnI9Vs+w9mZVrg5a1obGO6jGL1+07tmc3M8rqxOwb3jojBY/p3bhS62S2IignKFgeWnhZt3OpVReuMOp+jjdp3qxtam6fT6S9wNV3yTSXSWPT9R8jM51oH2l3S9Vxv1ENf/fMRLu2ZbQZbrCOhzH3O+iEFWTsugROI+RlociAQEV1HawZYgJwhpc1dynDPdB3DL/n2qjpHvmPT3onbpwZ7nAKTTtuyQv34GQ/6M7J/2kd0AhMygsckA2LE6ummtdsNarxGxZNVNrFyhli7XB6C0B+KdTqFry0dYHziXJbJcVkd6nysMfOvzf8GmJ/epPka+Y9LfL1lOz0y6Oey//vX+jE1vG+28PL2diguAEEEOejBy7EZMdB3Cd//j/7HsXKwtM0XhG9969tv+9NZN8AUyM1+0iIO0uvvlH3agweTZW0RspJyn19tpp2bp5HzES3NJbxjcK0oacFIB6s/90YblQgOyza9W4RHLpkZwkRYHeG8Cq7wRzGElAO0CIY9v+RMAyLc913o8+bkDDjo9NeYVLhBbZPoh+6GbntyHuowglwOXm11oGnXCHYqZmhFCkBVacn7e8HVaLvRGLaWCk0YfxeuzuV+1wh1OZYRzzUBtL4pcE3cIdr1aYUx0HcKmo/tk1+VNo07NX7iFLH0UrwqrxUbQIzqxO0nEFmOFOVnLP3AtRQOTloRx5V4jXwdmKQk2Raei2GhDXDVBKtmla2r6s4Udi4viOqpFi4sptm6u0CJYpC9wPR+oWndCTc8J8etLRScnNhJ5tNFOl4engyuZSI3imjpXX0czKGmhSVGT1CyOTLqWdJpPDIV82OLnahGdWHBSsXWM9yjWyo1EGQRjTZYVrZYTA3ObMXRyGy1LEldMqLVkRpVtScm5SMhVo1ZM1PjKmYLL7hGpZzZAPrTOGcj4P8fDHU4hEojTaaYEMh0HEKq17a5Z8rx78Tqh0sKEofGFbk2VlUUTo2YtJxcsMRulwY1yyNXPeYMutI/sBj9bi3++91W8PL0db2wYxoMfPETzNOvZKNBqyumXNW9sGEZHpAehSKOi2PL13TeLvEIrVlBEC/lcSi3bAUahVnAZk1M5Hphm4AoLMwV+NvMPcO+4CACYn2kAE6kBH6lBiQyxLEmObB9CB3oQ5jyIBz1whYs/Gw1QSMGSUupCk6ImWmml6NQ26STWTbxeI+lZQLo6ABDGVjX6F7C1aRpPtLxWcp2YS4VNT+6TnSIDqB9wYUTubkUWPqlJ9zKy5V0+1Loo5ELIWLgvpWdJW+YxkZqMiac2mZA1rdXdrpRQZdGA8rNqYkrJwqmxbkqWDUjXyCXYFHyBeVM7eZUz4pYSdCCKjnFNRlWiVKRFk6I2SmmVhVNLrswF3pu0RZaDW1f+DQBkmyIVA9VCK9VQv1rUfjOZLTi9kS5pCtHBuweNOJ2yQ+34rf1Nx3Gm+wCifh4L7Twu3RcFoG1ck5F1lVVh0QhaSnWI4MwQXT6xiRftSlat/+1HDT2ncqBjvAdjkwHZrlZy9E51wheYp4Mr8+WWmommVy53q0bQWhtnhugK3cNJcC5VF9xgyF8xff3nZxqQ4FyYnL0GALJGb5HqaRIIOdg6iiPbh7BuuD+vC2n2skGzxCtFbIA+18BIweUSm5xVI1XYCTYFJxtHizf/+b88vZ1Ozik3BuY208Tg9pHdGS0A1w33o3/iYSqqXae68ZP370XHeA/6336UPm9gbjMO3j0I946LuLxevsrdzCAIQXXUUUw5RyCVKKQY1ciZb2LE64kYy2D57k9p857eqU6sqb2cczjGrlPdmJy9hjaAbWu+gBZvqKxq3NYN96eb0YqskrjtA+GGwb0AhOoH3pvEme4DdO6Bk3Mg1pxA06gT7NlY3tYFRgtNl9NaSVbNCKyKVn5y7FoaDNjpm5AdOyXOkTzQ/hISnEvIKJmtxeTsNTnboJca4vcidf3IBE+SqZ9ZQQ06VISJ1MAzw6DunProoxnNgXVZNKAyrRpgTCMhvRYul1UjjYaifh68N4mDdw/SuiuS0T8Wasd0xIcfrT2Mn5/fgT+9dVNGzl+uvpHiOi6rIaOGlVrtbXpyn6Y+maRH5rc+/xfsbzqO234gWDqyj2a1NQMKSCouhxxIPRgxzEP8x9MiulxzBKSIRdHl4fH9E3chzHnAz9ai79hjcHIOeCRWIMHWZF3MUwkOD37Qh1XeCLos7Ckp7lC1v+k41r1zOzoiPVljhgNDe2hNmboJMA4ADsSaQecouADZFCwr900LindWqgtpdF9KLX/QXAGSqJ/HnXecwJnuAxiJMhgM+Wnk8cj2IdSzUUFgS64STd1aulDFXbYIrU4W8zMNOB1cndHuvGO8B4MhP3qnOukIK2mUTw0jUYZO2tx1qpsGOH7y/r0ABKEHhvbAPevE/EwD3tgwTKOku051wzPDZPTABNLdxOR6aJKUNW/QRRvexuodqot/zRpRptt1JFSiVRNjRrtzNVZOOmRxfn0NHnxkFEMnt4GfrYVnhsGar0zhk2PXAhCqsgdDfvzb//5qzpbkC+1CEGHdcD++9fm/4PDURkSOrgCQPRwRABr9C1jljeAbLeO6i017pzpxdK6FWlwC07wIJujJWn9d3XoFPRvfw6u/7IR3Wr4NgRIkqhird2ChXXCzSQAEyN/22wyhJefnCxcaYItNL1oEx60RWpw77r2I1Osr6Tc8ye7/8PFn6NgpsiaRQ1wNIPt6S2IjkTsnG8dE1yH1b0qB9pHdNDBDh4AofCEstPPwzDA0616MkmWSRmjJZ+V6ZUXW2sxqkQFVlhmiF7PcCS0uJanAdr2yItONErUtf+XXO3HL/n25jyOuBpC4lkA6uufkHDRyV8jkU0I9G6XHFb+OHA0T2kSmdF+Y88gGQIqBIRYNqHyrBpg7yxtQ1/I816xuQj4XS64qAMgckkgqBIxsFNQ+spvOkZbOL5BiZLcqNVNizLRmgIGtDCo1CinGzPHCQO5KcBKRVLro3KLrJF/iLLmISQdmQBCceLKN0SjtiSm1ggMKE5jUglktMimGuo6VGoUUY9a0UzFKkUq1zYTcoQS95XycpMAUyHQjeW9SdbZ8Pro8PH54y+v4uO9ZxNmU7ByEjHPTIDJxoyW5z6gY5U9SLdS0OTb+i5EvkFpcBOOpgsrfxatweNTteemFWYyDWYwj5XFn/L7magI1VxPga/M7JDVXeXpL1srk+cVSSLodSz8DyWUO1MSAD//pWVxYHsf/bHnXmDcDoKOWQ+9UJ87MrcKyS8LrANpE5got0vdPbrkwY6hgPuQMjh0MKQArXA6gcAtHUHQ7ZdZ0NwzuxWMr3lJ/knkYDPnRMd6Tla2i5hz1tgYsFZEBJgmtGlxIghWuJEHpwtFyEeZ1J4kLyTnw4Ad92HWqW9dGtZQ+3wzCnEdTY1O9fTeLVS2f67o3zaJVk9isRM+MOClq1z+hYCPOR7yYjDeoenw+fr/zKUOOk4tSa0dBsF1Hg7DKqgG5v7HVulmKG7+icL+Tcwg5kAYlG/82cj1izQlEAnFcWS2ZmKqiFVw+tIjM6L9XPsNiqtCS8/NVZdmsFBuQ/8LKJ7hcLRPIPlqhc7WJ2zkwtxl9vhkMdP4aZ7oP4KEHxnKet1ZKWWSARS3Bq2GPjaBmEIeRqJmAmqtrsrQtOaniJulXpDErKaPRWk7z4+n7MDYZQD0bxf6m4/jJ+/fiv83WomGCgRspeg7i89RCsV1FtYbEst771SQ2wPzNbTFqW54rCU4stlu/ehxPtLwGQMjsn0pwmIw34PsnHkKY86Ct+YKqcpreqU7s9E1gbDIAfrYWodla9DZ14oe3vI6nJ+5CamJl3j6Lat6zFophyQiGpWCppZrEBlhn2Qha6t+kgov5nOBW19DskKifhy8wj1dvHsRdr3+PPm594BwA4EdrDytat47xHpqtT8L5pDqAaV7EsqN1aDyd1CU0vVbMSKFpXRKV7TSZcsFKywaocyUJcoWmQu0XCYowCDd7MBlvoAnGAHA6uBqN/oW8LmSCc8EtCufXnRMqB+KcR3XFtJRyFBlQBIsGVJ9VA8rHsolbJ8TqHfi7x0bxyq93UrGQIAnTvIidbcG8jX42PSlUE8ilXGmxZoWuxYwSmt7gXlGERrAFZy5GiS3jcfXZHaikAZLeqU4cbB1F+8huLDtap1i8qVZo5S4yoMhCA2yxmU2hYgPkx0gRsZH+id9p/yP6fDN0uAQTqQHvTWL5By5qyZSyQJSEZkREsRREBpTAhnU17bMRrN7cVov4glfaYyOFo54ZBjcM7kUo2Ij5mQZ82fsJAKHFHami9gZdssdQek29561EqYgMKAGhAdUrtmLnSMqhdOHLzmzjHHByDrhnneifeBgA8OAHfcJxNCYO6z1fJYz4bI1MuCgJodmYj56LV26gvRKng6sBIO9wxHIRmdGUjNCqLV2LUIqWTcmFzIWTjQMAeja+B6Z5MWMMsNHnl4tSchfFlNw+WrVlkBCsTt0yAlcYiPqFblkDt7xOO12d6T6ADraHDrj3zDDANJNlEfN1DNaKUe6iGZSMRRNTjZaNYEWbBDWosWrxetD25GOhdjBBD7xBFx02cfDuQQR7nsOar0xlbRPoOadclLLIgBIVGlC9riRQOmJTgs7TXhof9bvwTfj2qjdpd+S6cw7c33oS331hD24Y3IvJ2Wuw0M5j9Onn6THUdKZSS6GflxXXWtH30dRQja4kwUxXMt8em1wuJADMdSx1A25OoGvLRzg614LYmyszNqbFRFociLMpLD8N1R2D1WKEyKygZC2amGq1bIC51k3PRR5jGXi3XgIfiKLRv4CxyUBWpFHaE987nQIfiNI1WrWJDCgToQG2K1mMkLV0T42s1WJvrsSB236BI9uHwAQ9NM1KPGwi43kcLyQYq2jLrZZyEhlQJq6jFNuVNBY1HZIBwXWMsQwurwf4QJSWwCw/LT8WSUq1igwowfC+GsgHVY2CE19kRolOS2kNgSdV0uFUXpEZFcYvR4ERylJohGoWHGBsrVs+sUnbjDs5BxWZFKPzF8tZYISyWaPlohQ+yGJh5PpNjRAiLQ48/83n8fw306F6cblLKYmslNb1ZW3RxFRrRgnBqMySXJYtxjK4uvUKvvvCHsTZFOrqHXAv9VY1YyxSKeYs6qVihAbYriRgjODEYiPtDubX1yASiKPpNQ/cnDANNMYy8E7l7mJsdROdUrFgUsoy6qiWahYcoVALRwQXaRXazqkp2AS0C6zUU6gKpaIsmhTbwmVfwFqFRwSjNiZpC0yeihYawRZcGr3bA0Y1Ki3VMhazqQqhEcR/HFt0hVs7Pa9RKOUmMEJVCU1MtUcp5TBKeGZFC8tVZEAVCw2wXcp8lEJ4vZzFJaaqhUawXcrSo1IERrCFJsG2csWj0sQlxhaaAtI/ui08c6hkcYmxhaYS2700hmoRlpSKSCq2mmq9WAqlmj8326LpRO6isS1dJtUsLCm20Ayk2td1trCUsYVmIkoXXrkL0BaUdmyhFYFcF2qpiNAWk7HYQisxCr3AiVBtoZQWttAqDFtgpYkd3rexsQBbaDY2FmALzcbGAmyh2dhYgC00GxsL+P+C1Nu4dvohbgAAAABJRU5ErkJggg==\" y=\"-10.167419\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"matplotlib.axis_1\">\r\n",
       "    <g id=\"xtick_1\">\r\n",
       "     <g id=\"line2d_1\">\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 0 0 \r\n",
       "L 0 3.5 \r\n",
       "\" id=\"m0adc176a9a\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n",
       "      </defs>\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.5593\" xlink:href=\"#m0adc176a9a\" y=\"228.167419\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_1\">\r\n",
       "      <!-- 0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 31.78125 66.40625 \r\n",
       "Q 24.171875 66.40625 20.328125 58.90625 \r\n",
       "Q 16.5 51.421875 16.5 36.375 \r\n",
       "Q 16.5 21.390625 20.328125 13.890625 \r\n",
       "Q 24.171875 6.390625 31.78125 6.390625 \r\n",
       "Q 39.453125 6.390625 43.28125 13.890625 \r\n",
       "Q 47.125 21.390625 47.125 36.375 \r\n",
       "Q 47.125 51.421875 43.28125 58.90625 \r\n",
       "Q 39.453125 66.40625 31.78125 66.40625 \r\n",
       "z\r\n",
       "M 31.78125 74.21875 \r\n",
       "Q 44.046875 74.21875 50.515625 64.515625 \r\n",
       "Q 56.984375 54.828125 56.984375 36.375 \r\n",
       "Q 56.984375 17.96875 50.515625 8.265625 \r\n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \r\n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \r\n",
       "Q 6.59375 17.96875 6.59375 36.375 \r\n",
       "Q 6.59375 54.828125 13.0625 64.515625 \r\n",
       "Q 19.53125 74.21875 31.78125 74.21875 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-48\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(30.37805 242.765856)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_2\">\r\n",
       "     <g id=\"line2d_2\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"87.9193\" xlink:href=\"#m0adc176a9a\" y=\"228.167419\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_2\">\r\n",
       "      <!-- 100 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 12.40625 8.296875 \r\n",
       "L 28.515625 8.296875 \r\n",
       "L 28.515625 63.921875 \r\n",
       "L 10.984375 60.40625 \r\n",
       "L 10.984375 69.390625 \r\n",
       "L 28.421875 72.90625 \r\n",
       "L 38.28125 72.90625 \r\n",
       "L 38.28125 8.296875 \r\n",
       "L 54.390625 8.296875 \r\n",
       "L 54.390625 0 \r\n",
       "L 12.40625 0 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-49\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(78.37555 242.765856)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_3\">\r\n",
       "     <g id=\"line2d_3\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"142.2793\" xlink:href=\"#m0adc176a9a\" y=\"228.167419\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_3\">\r\n",
       "      <!-- 200 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 19.1875 8.296875 \r\n",
       "L 53.609375 8.296875 \r\n",
       "L 53.609375 0 \r\n",
       "L 7.328125 0 \r\n",
       "L 7.328125 8.296875 \r\n",
       "Q 12.9375 14.109375 22.625 23.890625 \r\n",
       "Q 32.328125 33.6875 34.8125 36.53125 \r\n",
       "Q 39.546875 41.84375 41.421875 45.53125 \r\n",
       "Q 43.3125 49.21875 43.3125 52.78125 \r\n",
       "Q 43.3125 58.59375 39.234375 62.25 \r\n",
       "Q 35.15625 65.921875 28.609375 65.921875 \r\n",
       "Q 23.96875 65.921875 18.8125 64.3125 \r\n",
       "Q 13.671875 62.703125 7.8125 59.421875 \r\n",
       "L 7.8125 69.390625 \r\n",
       "Q 13.765625 71.78125 18.9375 73 \r\n",
       "Q 24.125 74.21875 28.421875 74.21875 \r\n",
       "Q 39.75 74.21875 46.484375 68.546875 \r\n",
       "Q 53.21875 62.890625 53.21875 53.421875 \r\n",
       "Q 53.21875 48.921875 51.53125 44.890625 \r\n",
       "Q 49.859375 40.875 45.40625 35.40625 \r\n",
       "Q 44.1875 33.984375 37.640625 27.21875 \r\n",
       "Q 31.109375 20.453125 19.1875 8.296875 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-50\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(132.73555 242.765856)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_4\">\r\n",
       "     <g id=\"line2d_4\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"196.6393\" xlink:href=\"#m0adc176a9a\" y=\"228.167419\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_4\">\r\n",
       "      <!-- 300 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 40.578125 39.3125 \r\n",
       "Q 47.65625 37.796875 51.625 33 \r\n",
       "Q 55.609375 28.21875 55.609375 21.1875 \r\n",
       "Q 55.609375 10.40625 48.1875 4.484375 \r\n",
       "Q 40.765625 -1.421875 27.09375 -1.421875 \r\n",
       "Q 22.515625 -1.421875 17.65625 -0.515625 \r\n",
       "Q 12.796875 0.390625 7.625 2.203125 \r\n",
       "L 7.625 11.71875 \r\n",
       "Q 11.71875 9.328125 16.59375 8.109375 \r\n",
       "Q 21.484375 6.890625 26.8125 6.890625 \r\n",
       "Q 36.078125 6.890625 40.9375 10.546875 \r\n",
       "Q 45.796875 14.203125 45.796875 21.1875 \r\n",
       "Q 45.796875 27.640625 41.28125 31.265625 \r\n",
       "Q 36.765625 34.90625 28.71875 34.90625 \r\n",
       "L 20.21875 34.90625 \r\n",
       "L 20.21875 43.015625 \r\n",
       "L 29.109375 43.015625 \r\n",
       "Q 36.375 43.015625 40.234375 45.921875 \r\n",
       "Q 44.09375 48.828125 44.09375 54.296875 \r\n",
       "Q 44.09375 59.90625 40.109375 62.90625 \r\n",
       "Q 36.140625 65.921875 28.71875 65.921875 \r\n",
       "Q 24.65625 65.921875 20.015625 65.03125 \r\n",
       "Q 15.375 64.15625 9.8125 62.3125 \r\n",
       "L 9.8125 71.09375 \r\n",
       "Q 15.4375 72.65625 20.34375 73.4375 \r\n",
       "Q 25.25 74.21875 29.59375 74.21875 \r\n",
       "Q 40.828125 74.21875 47.359375 69.109375 \r\n",
       "Q 53.90625 64.015625 53.90625 55.328125 \r\n",
       "Q 53.90625 49.265625 50.4375 45.09375 \r\n",
       "Q 46.96875 40.921875 40.578125 39.3125 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-51\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(187.09555 242.765856)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "   </g>\r\n",
       "   <g id=\"matplotlib.axis_2\">\r\n",
       "    <g id=\"ytick_1\">\r\n",
       "     <g id=\"line2d_5\">\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 0 0 \r\n",
       "L -3.5 0 \r\n",
       "\" id=\"mf21ed0efe0\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n",
       "      </defs>\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"10.999219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_5\">\r\n",
       "      <!-- 0 -->\r\n",
       "      <g transform=\"translate(19.925 14.798438)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_2\">\r\n",
       "     <g id=\"line2d_6\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"38.179219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_6\">\r\n",
       "      <!-- 50 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 10.796875 72.90625 \r\n",
       "L 49.515625 72.90625 \r\n",
       "L 49.515625 64.59375 \r\n",
       "L 19.828125 64.59375 \r\n",
       "L 19.828125 46.734375 \r\n",
       "Q 21.96875 47.46875 24.109375 47.828125 \r\n",
       "Q 26.265625 48.1875 28.421875 48.1875 \r\n",
       "Q 40.625 48.1875 47.75 41.5 \r\n",
       "Q 54.890625 34.8125 54.890625 23.390625 \r\n",
       "Q 54.890625 11.625 47.5625 5.09375 \r\n",
       "Q 40.234375 -1.421875 26.90625 -1.421875 \r\n",
       "Q 22.3125 -1.421875 17.546875 -0.640625 \r\n",
       "Q 12.796875 0.140625 7.71875 1.703125 \r\n",
       "L 7.71875 11.625 \r\n",
       "Q 12.109375 9.234375 16.796875 8.0625 \r\n",
       "Q 21.484375 6.890625 26.703125 6.890625 \r\n",
       "Q 35.15625 6.890625 40.078125 11.328125 \r\n",
       "Q 45.015625 15.765625 45.015625 23.390625 \r\n",
       "Q 45.015625 31 40.078125 35.4375 \r\n",
       "Q 35.15625 39.890625 26.703125 39.890625 \r\n",
       "Q 22.75 39.890625 18.8125 39.015625 \r\n",
       "Q 14.890625 38.140625 10.796875 36.28125 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-53\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(13.5625 41.978438)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_3\">\r\n",
       "     <g id=\"line2d_7\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"65.359219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_7\">\r\n",
       "      <!-- 100 -->\r\n",
       "      <g transform=\"translate(7.2 69.158438)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_4\">\r\n",
       "     <g id=\"line2d_8\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"92.539219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_8\">\r\n",
       "      <!-- 150 -->\r\n",
       "      <g transform=\"translate(7.2 96.338437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_5\">\r\n",
       "     <g id=\"line2d_9\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"119.719219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_9\">\r\n",
       "      <!-- 200 -->\r\n",
       "      <g transform=\"translate(7.2 123.518438)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_6\">\r\n",
       "     <g id=\"line2d_10\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"146.899219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_10\">\r\n",
       "      <!-- 250 -->\r\n",
       "      <g transform=\"translate(7.2 150.698438)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_7\">\r\n",
       "     <g id=\"line2d_11\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"174.079219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_11\">\r\n",
       "      <!-- 300 -->\r\n",
       "      <g transform=\"translate(7.2 177.878437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_8\">\r\n",
       "     <g id=\"line2d_12\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"33.2875\" xlink:href=\"#mf21ed0efe0\" y=\"201.259219\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_12\">\r\n",
       "      <!-- 350 -->\r\n",
       "      <g transform=\"translate(7.2 205.058437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "       <use x=\"127.246094\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_3\">\r\n",
       "    <path d=\"M 33.2875 228.167419 \r\n",
       "L 33.2875 10.727419 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_4\">\r\n",
       "    <path d=\"M 250.7275 228.167419 \r\n",
       "L 250.7275 10.727419 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_5\">\r\n",
       "    <path d=\"M 33.2875 228.167419 \r\n",
       "L 250.7275 228.167419 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_6\">\r\n",
       "    <path d=\"M 33.2875 10.727419 \r\n",
       "L 250.7275 10.727419 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "  </g>\r\n",
       " </g>\r\n",
       " <defs>\r\n",
       "  <clipPath id=\"pa1f3eead6a\">\r\n",
       "   <rect height=\"217.44\" width=\"217.44\" x=\"33.2875\" y=\"10.727419\"/>\r\n",
       "  </clipPath>\r\n",
       " </defs>\r\n",
       "</svg>\r\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "#画曼德布洛特集合（函数总之是没看懂，但是反正就是布尔索引和被切片数组shape相同这种情况）\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "def mandelbrot( h,w, maxit=20 ):\n",
    "    \"\"\"Returns an image of the Mandelbrot fractal of size (h,w).\"\"\"\n",
    "    y,x = np.ogrid[ -1.4:1.4:h*1j, -2:0.8:w*1j ]\n",
    "    c = x+y*1j\n",
    "    z = c\n",
    "    divtime = maxit + np.zeros(z.shape, dtype=int)\n",
    "\n",
    "    for i in range(maxit):\n",
    "        z = z**2 + c\n",
    "        diverge = z*np.conj(z) > 2**2            # who is diverging\n",
    "        div_now = diverge & (divtime==maxit)  # who is diverging now\n",
    "        divtime[div_now] = i                  # note when\n",
    "        z[diverge] = 2                        # avoid diverging too much\n",
    "\n",
    "    return divtime\n",
    "\n",
    "plt.imshow(mandelbrot(400,400))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[ 0  1  2  3]\n",
      " [ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "\n",
      "[[ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "\n",
      "[[ 4  5  6  7]\n",
      " [ 8  9 10 11]]\n",
      "\n",
      "[[ 0  2]\n",
      " [ 4  6]\n",
      " [ 8 10]]\n",
      "\n",
      "[ 4 10]\n"
     ]
    }
   ],
   "source": [
    "#跟整数数组索引类似，对被切片数组每个维度用一维索引数组切片（索引数组必须要跟被切片数组对应维度等长）\n",
    "a = np.arange(12).reshape(3,4)\n",
    "print(a)\n",
    "print()\n",
    "b1 = np.array([False,True,True])             # first dim selection\n",
    "b2 = np.array([True,False,True,False])       # second dim selection\n",
    "print(a[b1])\n",
    "print()\n",
    "print(a[b1,:])\n",
    "print()\n",
    "print(a[:,b2])\n",
    "print()\n",
    "print(a[b1,b2])  #……？这个结果为什么是这样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[[2]]\n",
      "\n",
      " [[3]]\n",
      "\n",
      " [[4]]\n",
      "\n",
      " [[5]]]\n",
      "\n",
      "[[[8]\n",
      "  [5]\n",
      "  [4]]]\n",
      "\n",
      "[[[5 4 6 8 3]]]\n",
      "\n",
      "(4, 1, 1)\n",
      "\n",
      "(1, 3, 1)\n",
      "\n",
      "(1, 1, 5)\n",
      "\n",
      "[[[42 34 50 66 26]\n",
      "  [27 22 32 42 17]\n",
      "  [22 18 26 34 14]]\n",
      "\n",
      " [[43 35 51 67 27]\n",
      "  [28 23 33 43 18]\n",
      "  [23 19 27 35 15]]\n",
      "\n",
      " [[44 36 52 68 28]\n",
      "  [29 24 34 44 19]\n",
      "  [24 20 28 36 16]]\n",
      "\n",
      " [[45 37 53 69 29]\n",
      "  [30 25 35 45 20]\n",
      "  [25 21 29 37 17]]]\n",
      "\n",
      "17\n",
      "17\n"
     ]
    }
   ],
   "source": [
    "#ix_()：可以计算多个数组逐元素运算的情况\n",
    "#举例来说，可以对abc三个向量每个三元组计算a+b*c\n",
    "a = np.array([2,3,4,5])\n",
    "b = np.array([8,5,4])\n",
    "c = np.array([5,4,6,8,3])\n",
    "ax,bx,cx = np.ix_(a,b,c)\n",
    "print(ax)\n",
    "print()\n",
    "\n",
    "print(bx)\n",
    "print()\n",
    "\n",
    "print(cx)\n",
    "print()\n",
    "\n",
    "print(ax.shape)\n",
    "print()\n",
    "\n",
    "print(bx.shape)\n",
    "print()\n",
    "\n",
    "print(cx.shape)\n",
    "print()\n",
    "\n",
    "result = ax+bx*cx\n",
    "print(result)\n",
    "print()\n",
    "\n",
    "print(result[3,2,4])\n",
    "print(a[3]+b[2]*c[4])\n",
    "#虽然我还是没看懂具体如何实现的，但是我看懂它在干啥了，我会用了"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[15, 14, 16, 18, 13],\n",
       "        [12, 11, 13, 15, 10],\n",
       "        [11, 10, 12, 14,  9]],\n",
       "\n",
       "       [[16, 15, 17, 19, 14],\n",
       "        [13, 12, 14, 16, 11],\n",
       "        [12, 11, 13, 15, 10]],\n",
       "\n",
       "       [[17, 16, 18, 20, 15],\n",
       "        [14, 13, 15, 17, 12],\n",
       "        [13, 12, 14, 16, 11]],\n",
       "\n",
       "       [[18, 17, 19, 21, 16],\n",
       "        [15, 14, 16, 18, 13],\n",
       "        [14, 13, 15, 17, 12]]])"
      ]
     },
     "execution_count": 69,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def ufunc_reduce(ufct, *vectors):\n",
    "   vs = np.ix_(*vectors)\n",
    "   r = ufct.identity\n",
    "   for v in vs:\n",
    "       r = ufct(r,v)\n",
    "   return r\n",
    "\n",
    "ufunc_reduce(np.add,a,b,c)\n",
    "\n",
    "#这个ufunc.reduce还没有搞懂是什么东西\n",
    "#用这个版本的reduce相比ufunc.reduce的好处在于：利用了广播机制，不用创造尺寸为output * the number of vectors的参数数组（什么玩意，没求看懂）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "#字符串索引：见https://numpy.org/doc/stable/user/basics.rec.html#structured-arrays"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Linear Algebra（官方文档这一模块还在建设）\n",
    "## Simple Array Operations\n",
    "可以看numpy文件夹中的linalg.py查看详情（我看了，没看懂）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[[1. 2.]\n",
      " [3. 4.]]\n",
      "\n",
      "[[1. 3.]\n",
      " [2. 4.]]\n",
      "\n",
      "[[-2.   1. ]\n",
      " [ 1.5 -0.5]]\n",
      "\n",
      "[[1. 0.]\n",
      " [0. 1.]]\n",
      "\n",
      "[[-1.  0.]\n",
      " [ 0. -1.]]\n",
      "\n",
      "2.0\n",
      "\n",
      "[[-3.]\n",
      " [ 4.]]\n",
      "\n",
      "(array([0.+1.j, 0.-1.j]), array([[0.70710678+0.j        , 0.70710678-0.j        ],\n",
      "       [0.        -0.70710678j, 0.        +0.70710678j]]))\n"
     ]
    }
   ],
   "source": [
    "#例子也没看懂，我就抄一遍完了\n",
    "a = np.array([[1.0, 2.0], [3.0, 4.0]])\n",
    "print(a)\n",
    "print()\n",
    "\n",
    "print(a.transpose())\n",
    "print()\n",
    "\n",
    "print(np.linalg.inv(a))\n",
    "print()\n",
    "\n",
    "u = np.eye(2)  #I\n",
    "print(u)\n",
    "print()\n",
    "\n",
    "j = np.array([[0.0, -1.0], [1.0, 0.0]])\n",
    "\n",
    "print(j @ j)\n",
    "print()\n",
    "\n",
    "print(np.trace(u))\n",
    "print()\n",
    "\n",
    "y = np.array([[5.], [7.]])\n",
    "print(np.linalg.solve(a, y))\n",
    "print()\n",
    "\n",
    "print(np.linalg.eig(j))  #返回值第一个元素是特征值，第二个元素是对应的特征向量（normalized）"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Tricks and Tips\n",
    "前两个分别是reshape时某维度用-1可以自动计算对应维度的元素长度，和用hstack和vstack堆向量"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x2cf82cab548>]"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"no\"?>\r\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\r\n",
       "  \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\r\n",
       "<!-- Created with matplotlib (https://matplotlib.org/) -->\r\n",
       "<svg height=\"248.518125pt\" version=\"1.1\" viewBox=\"0 0 372.103125 248.518125\" width=\"372.103125pt\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\r\n",
       " <defs>\r\n",
       "  <style type=\"text/css\">\r\n",
       "*{stroke-linecap:butt;stroke-linejoin:round;}\r\n",
       "  </style>\r\n",
       " </defs>\r\n",
       " <g id=\"figure_1\">\r\n",
       "  <g id=\"patch_1\">\r\n",
       "   <path d=\"M 0 248.518125 \r\n",
       "L 372.103125 248.518125 \r\n",
       "L 372.103125 0 \r\n",
       "L 0 0 \r\n",
       "z\r\n",
       "\" style=\"fill:none;\"/>\r\n",
       "  </g>\r\n",
       "  <g id=\"axes_1\">\r\n",
       "   <g id=\"patch_2\">\r\n",
       "    <path d=\"M 30.103125 224.64 \r\n",
       "L 364.903125 224.64 \r\n",
       "L 364.903125 7.2 \r\n",
       "L 30.103125 7.2 \r\n",
       "z\r\n",
       "\" style=\"fill:#ffffff;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_3\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 45.321307 224.64 \r\n",
       "L 51.40858 224.64 \r\n",
       "L 51.40858 224.30491 \r\n",
       "L 45.321307 224.30491 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_4\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 51.40858 224.64 \r\n",
       "L 57.495852 224.64 \r\n",
       "L 57.495852 223.96982 \r\n",
       "L 51.40858 223.96982 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_5\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 57.495852 224.64 \r\n",
       "L 63.583125 224.64 \r\n",
       "L 63.583125 223.96982 \r\n",
       "L 57.495852 223.96982 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_6\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 63.583125 224.64 \r\n",
       "L 69.670398 224.64 \r\n",
       "L 69.670398 223.96982 \r\n",
       "L 63.583125 223.96982 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_7\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 69.670398 224.64 \r\n",
       "L 75.75767 224.64 \r\n",
       "L 75.75767 222.629459 \r\n",
       "L 69.670398 222.629459 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_8\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 75.75767 224.64 \r\n",
       "L 81.844943 224.64 \r\n",
       "L 81.844943 222.294369 \r\n",
       "L 75.75767 222.294369 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_9\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 81.844943 224.64 \r\n",
       "L 87.932216 224.64 \r\n",
       "L 87.932216 220.954008 \r\n",
       "L 81.844943 220.954008 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_10\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 87.932216 224.64 \r\n",
       "L 94.019489 224.64 \r\n",
       "L 94.019489 214.587295 \r\n",
       "L 87.932216 214.587295 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_11\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 94.019489 224.64 \r\n",
       "L 100.106761 224.64 \r\n",
       "L 100.106761 213.582025 \r\n",
       "L 94.019489 213.582025 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_12\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 100.106761 224.64 \r\n",
       "L 106.194034 224.64 \r\n",
       "L 106.194034 214.252205 \r\n",
       "L 100.106761 214.252205 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_13\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 106.194034 224.64 \r\n",
       "L 112.281307 224.64 \r\n",
       "L 112.281307 209.896033 \r\n",
       "L 106.194034 209.896033 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_14\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 112.281307 224.64 \r\n",
       "L 118.36858 224.64 \r\n",
       "L 118.36858 202.18896 \r\n",
       "L 112.281307 202.18896 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_15\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 118.36858 224.64 \r\n",
       "L 124.455852 224.64 \r\n",
       "L 124.455852 188.450264 \r\n",
       "L 118.36858 188.450264 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_16\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 124.455852 224.64 \r\n",
       "L 130.543125 224.64 \r\n",
       "L 130.543125 182.753731 \r\n",
       "L 124.455852 182.753731 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_17\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 130.543125 224.64 \r\n",
       "L 136.630398 224.64 \r\n",
       "L 136.630398 160.972871 \r\n",
       "L 130.543125 160.972871 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_18\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 136.630398 224.64 \r\n",
       "L 142.71767 224.64 \r\n",
       "L 142.71767 146.228904 \r\n",
       "L 136.630398 146.228904 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_19\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 142.71767 224.64 \r\n",
       "L 148.804943 224.64 \r\n",
       "L 148.804943 134.165659 \r\n",
       "L 142.71767 134.165659 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_20\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 148.804943 224.64 \r\n",
       "L 154.892216 224.64 \r\n",
       "L 154.892216 116.070791 \r\n",
       "L 148.804943 116.070791 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_21\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 154.892216 224.64 \r\n",
       "L 160.979489 224.64 \r\n",
       "L 160.979489 89.263578 \r\n",
       "L 154.892216 89.263578 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_22\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 160.979489 224.64 \r\n",
       "L 167.066761 224.64 \r\n",
       "L 167.066761 67.817809 \r\n",
       "L 160.979489 67.817809 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_23\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 167.066761 224.64 \r\n",
       "L 173.154034 224.64 \r\n",
       "L 173.154034 47.042219 \r\n",
       "L 167.066761 47.042219 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_24\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 173.154034 224.64 \r\n",
       "L 179.241307 224.64 \r\n",
       "L 179.241307 43.691318 \r\n",
       "L 173.154034 43.691318 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_25\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 179.241307 224.64 \r\n",
       "L 185.32858 224.64 \r\n",
       "L 185.32858 19.564827 \r\n",
       "L 179.241307 19.564827 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_26\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 185.32858 224.64 \r\n",
       "L 191.415852 224.64 \r\n",
       "L 191.415852 32.968433 \r\n",
       "L 185.32858 32.968433 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_27\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 191.415852 224.64 \r\n",
       "L 197.503125 224.64 \r\n",
       "L 197.503125 17.554286 \r\n",
       "L 191.415852 17.554286 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_28\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 197.503125 224.64 \r\n",
       "L 203.590398 224.64 \r\n",
       "L 203.590398 19.229736 \r\n",
       "L 197.503125 19.229736 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_29\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 203.590398 224.64 \r\n",
       "L 209.67767 224.64 \r\n",
       "L 209.67767 34.643883 \r\n",
       "L 203.590398 34.643883 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_30\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 209.67767 224.64 \r\n",
       "L 215.764943 224.64 \r\n",
       "L 215.764943 42.015867 \r\n",
       "L 209.67767 42.015867 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_31\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 215.764943 224.64 \r\n",
       "L 221.852216 224.64 \r\n",
       "L 221.852216 43.691318 \r\n",
       "L 215.764943 43.691318 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_32\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 221.852216 224.64 \r\n",
       "L 227.939489 224.64 \r\n",
       "L 227.939489 66.477448 \r\n",
       "L 221.852216 66.477448 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_33\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 227.939489 224.64 \r\n",
       "L 234.026761 224.64 \r\n",
       "L 234.026761 74.519612 \r\n",
       "L 227.939489 74.519612 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_34\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 234.026761 224.64 \r\n",
       "L 240.114034 224.64 \r\n",
       "L 240.114034 108.028627 \r\n",
       "L 234.026761 108.028627 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_35\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 240.114034 224.64 \r\n",
       "L 246.201307 224.64 \r\n",
       "L 246.201307 122.772594 \r\n",
       "L 240.114034 122.772594 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_36\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 246.201307 224.64 \r\n",
       "L 252.28858 224.64 \r\n",
       "L 252.28858 151.255257 \r\n",
       "L 246.201307 151.255257 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_37\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 252.28858 224.64 \r\n",
       "L 258.375852 224.64 \r\n",
       "L 258.375852 161.643051 \r\n",
       "L 252.28858 161.643051 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_38\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 258.375852 224.64 \r\n",
       "L 264.463125 224.64 \r\n",
       "L 264.463125 171.025576 \r\n",
       "L 258.375852 171.025576 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_39\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 264.463125 224.64 \r\n",
       "L 270.550398 224.64 \r\n",
       "L 270.550398 189.790624 \r\n",
       "L 264.463125 189.790624 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_40\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 270.550398 224.64 \r\n",
       "L 276.63767 224.64 \r\n",
       "L 276.63767 197.497698 \r\n",
       "L 270.550398 197.497698 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_41\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 276.63767 224.64 \r\n",
       "L 282.724943 224.64 \r\n",
       "L 282.724943 204.199501 \r\n",
       "L 276.63767 204.199501 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_42\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 282.724943 224.64 \r\n",
       "L 288.812216 224.64 \r\n",
       "L 288.812216 212.241664 \r\n",
       "L 282.724943 212.241664 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_43\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 288.812216 224.64 \r\n",
       "L 294.899489 224.64 \r\n",
       "L 294.899489 216.932926 \r\n",
       "L 288.812216 216.932926 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_44\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 294.899489 224.64 \r\n",
       "L 300.986761 224.64 \r\n",
       "L 300.986761 216.262746 \r\n",
       "L 294.899489 216.262746 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_45\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 300.986761 224.64 \r\n",
       "L 307.074034 224.64 \r\n",
       "L 307.074034 221.959279 \r\n",
       "L 300.986761 221.959279 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_46\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 307.074034 224.64 \r\n",
       "L 313.161307 224.64 \r\n",
       "L 313.161307 222.294369 \r\n",
       "L 307.074034 222.294369 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_47\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 313.161307 224.64 \r\n",
       "L 319.24858 224.64 \r\n",
       "L 319.24858 222.964549 \r\n",
       "L 313.161307 222.964549 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_48\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 319.24858 224.64 \r\n",
       "L 325.335852 224.64 \r\n",
       "L 325.335852 222.629459 \r\n",
       "L 319.24858 222.629459 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_49\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 325.335852 224.64 \r\n",
       "L 331.423125 224.64 \r\n",
       "L 331.423125 223.299639 \r\n",
       "L 325.335852 223.299639 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_50\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 331.423125 224.64 \r\n",
       "L 337.510398 224.64 \r\n",
       "L 337.510398 224.30491 \r\n",
       "L 331.423125 224.30491 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_51\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 337.510398 224.64 \r\n",
       "L 343.59767 224.64 \r\n",
       "L 343.59767 223.96982 \r\n",
       "L 337.510398 223.96982 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_52\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 343.59767 224.64 \r\n",
       "L 349.684943 224.64 \r\n",
       "L 349.684943 224.30491 \r\n",
       "L 343.59767 224.30491 \r\n",
       "z\r\n",
       "\" style=\"fill:#1f77b4;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"matplotlib.axis_1\">\r\n",
       "    <g id=\"xtick_1\">\r\n",
       "     <g id=\"line2d_1\">\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 0 0 \r\n",
       "L 0 3.5 \r\n",
       "\" id=\"m59a27fb16b\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n",
       "      </defs>\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"38.969807\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_1\">\r\n",
       "      <!-- 0.0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 31.78125 66.40625 \r\n",
       "Q 24.171875 66.40625 20.328125 58.90625 \r\n",
       "Q 16.5 51.421875 16.5 36.375 \r\n",
       "Q 16.5 21.390625 20.328125 13.890625 \r\n",
       "Q 24.171875 6.390625 31.78125 6.390625 \r\n",
       "Q 39.453125 6.390625 43.28125 13.890625 \r\n",
       "Q 47.125 21.390625 47.125 36.375 \r\n",
       "Q 47.125 51.421875 43.28125 58.90625 \r\n",
       "Q 39.453125 66.40625 31.78125 66.40625 \r\n",
       "z\r\n",
       "M 31.78125 74.21875 \r\n",
       "Q 44.046875 74.21875 50.515625 64.515625 \r\n",
       "Q 56.984375 54.828125 56.984375 36.375 \r\n",
       "Q 56.984375 17.96875 50.515625 8.265625 \r\n",
       "Q 44.046875 -1.421875 31.78125 -1.421875 \r\n",
       "Q 19.53125 -1.421875 13.0625 8.265625 \r\n",
       "Q 6.59375 17.96875 6.59375 36.375 \r\n",
       "Q 6.59375 54.828125 13.0625 64.515625 \r\n",
       "Q 19.53125 74.21875 31.78125 74.21875 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-48\"/>\r\n",
       "       <path d=\"M 10.6875 12.40625 \r\n",
       "L 21 12.40625 \r\n",
       "L 21 0 \r\n",
       "L 10.6875 0 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-46\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(31.018244 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_2\">\r\n",
       "     <g id=\"line2d_2\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"78.143261\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_2\">\r\n",
       "      <!-- 0.5 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 10.796875 72.90625 \r\n",
       "L 49.515625 72.90625 \r\n",
       "L 49.515625 64.59375 \r\n",
       "L 19.828125 64.59375 \r\n",
       "L 19.828125 46.734375 \r\n",
       "Q 21.96875 47.46875 24.109375 47.828125 \r\n",
       "Q 26.265625 48.1875 28.421875 48.1875 \r\n",
       "Q 40.625 48.1875 47.75 41.5 \r\n",
       "Q 54.890625 34.8125 54.890625 23.390625 \r\n",
       "Q 54.890625 11.625 47.5625 5.09375 \r\n",
       "Q 40.234375 -1.421875 26.90625 -1.421875 \r\n",
       "Q 22.3125 -1.421875 17.546875 -0.640625 \r\n",
       "Q 12.796875 0.140625 7.71875 1.703125 \r\n",
       "L 7.71875 11.625 \r\n",
       "Q 12.109375 9.234375 16.796875 8.0625 \r\n",
       "Q 21.484375 6.890625 26.703125 6.890625 \r\n",
       "Q 35.15625 6.890625 40.078125 11.328125 \r\n",
       "Q 45.015625 15.765625 45.015625 23.390625 \r\n",
       "Q 45.015625 31 40.078125 35.4375 \r\n",
       "Q 35.15625 39.890625 26.703125 39.890625 \r\n",
       "Q 22.75 39.890625 18.8125 39.015625 \r\n",
       "Q 14.890625 38.140625 10.796875 36.28125 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-53\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(70.191698 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_3\">\r\n",
       "     <g id=\"line2d_3\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"117.316715\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_3\">\r\n",
       "      <!-- 1.0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 12.40625 8.296875 \r\n",
       "L 28.515625 8.296875 \r\n",
       "L 28.515625 63.921875 \r\n",
       "L 10.984375 60.40625 \r\n",
       "L 10.984375 69.390625 \r\n",
       "L 28.421875 72.90625 \r\n",
       "L 38.28125 72.90625 \r\n",
       "L 38.28125 8.296875 \r\n",
       "L 54.390625 8.296875 \r\n",
       "L 54.390625 0 \r\n",
       "L 12.40625 0 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-49\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(109.365153 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_4\">\r\n",
       "     <g id=\"line2d_4\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"156.490169\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_4\">\r\n",
       "      <!-- 1.5 -->\r\n",
       "      <g transform=\"translate(148.538607 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_5\">\r\n",
       "     <g id=\"line2d_5\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"195.663623\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_5\">\r\n",
       "      <!-- 2.0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 19.1875 8.296875 \r\n",
       "L 53.609375 8.296875 \r\n",
       "L 53.609375 0 \r\n",
       "L 7.328125 0 \r\n",
       "L 7.328125 8.296875 \r\n",
       "Q 12.9375 14.109375 22.625 23.890625 \r\n",
       "Q 32.328125 33.6875 34.8125 36.53125 \r\n",
       "Q 39.546875 41.84375 41.421875 45.53125 \r\n",
       "Q 43.3125 49.21875 43.3125 52.78125 \r\n",
       "Q 43.3125 58.59375 39.234375 62.25 \r\n",
       "Q 35.15625 65.921875 28.609375 65.921875 \r\n",
       "Q 23.96875 65.921875 18.8125 64.3125 \r\n",
       "Q 13.671875 62.703125 7.8125 59.421875 \r\n",
       "L 7.8125 69.390625 \r\n",
       "Q 13.765625 71.78125 18.9375 73 \r\n",
       "Q 24.125 74.21875 28.421875 74.21875 \r\n",
       "Q 39.75 74.21875 46.484375 68.546875 \r\n",
       "Q 53.21875 62.890625 53.21875 53.421875 \r\n",
       "Q 53.21875 48.921875 51.53125 44.890625 \r\n",
       "Q 49.859375 40.875 45.40625 35.40625 \r\n",
       "Q 44.1875 33.984375 37.640625 27.21875 \r\n",
       "Q 31.109375 20.453125 19.1875 8.296875 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-50\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(187.712061 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_6\">\r\n",
       "     <g id=\"line2d_6\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"234.837077\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_6\">\r\n",
       "      <!-- 2.5 -->\r\n",
       "      <g transform=\"translate(226.885515 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_7\">\r\n",
       "     <g id=\"line2d_7\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"274.010531\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_7\">\r\n",
       "      <!-- 3.0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 40.578125 39.3125 \r\n",
       "Q 47.65625 37.796875 51.625 33 \r\n",
       "Q 55.609375 28.21875 55.609375 21.1875 \r\n",
       "Q 55.609375 10.40625 48.1875 4.484375 \r\n",
       "Q 40.765625 -1.421875 27.09375 -1.421875 \r\n",
       "Q 22.515625 -1.421875 17.65625 -0.515625 \r\n",
       "Q 12.796875 0.390625 7.625 2.203125 \r\n",
       "L 7.625 11.71875 \r\n",
       "Q 11.71875 9.328125 16.59375 8.109375 \r\n",
       "Q 21.484375 6.890625 26.8125 6.890625 \r\n",
       "Q 36.078125 6.890625 40.9375 10.546875 \r\n",
       "Q 45.796875 14.203125 45.796875 21.1875 \r\n",
       "Q 45.796875 27.640625 41.28125 31.265625 \r\n",
       "Q 36.765625 34.90625 28.71875 34.90625 \r\n",
       "L 20.21875 34.90625 \r\n",
       "L 20.21875 43.015625 \r\n",
       "L 29.109375 43.015625 \r\n",
       "Q 36.375 43.015625 40.234375 45.921875 \r\n",
       "Q 44.09375 48.828125 44.09375 54.296875 \r\n",
       "Q 44.09375 59.90625 40.109375 62.90625 \r\n",
       "Q 36.140625 65.921875 28.71875 65.921875 \r\n",
       "Q 24.65625 65.921875 20.015625 65.03125 \r\n",
       "Q 15.375 64.15625 9.8125 62.3125 \r\n",
       "L 9.8125 71.09375 \r\n",
       "Q 15.4375 72.65625 20.34375 73.4375 \r\n",
       "Q 25.25 74.21875 29.59375 74.21875 \r\n",
       "Q 40.828125 74.21875 47.359375 69.109375 \r\n",
       "Q 53.90625 64.015625 53.90625 55.328125 \r\n",
       "Q 53.90625 49.265625 50.4375 45.09375 \r\n",
       "Q 46.96875 40.921875 40.578125 39.3125 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-51\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(266.058969 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_8\">\r\n",
       "     <g id=\"line2d_8\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"313.183985\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_8\">\r\n",
       "      <!-- 3.5 -->\r\n",
       "      <g transform=\"translate(305.232423 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"xtick_9\">\r\n",
       "     <g id=\"line2d_9\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"352.357439\" xlink:href=\"#m59a27fb16b\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_9\">\r\n",
       "      <!-- 4.0 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 37.796875 64.3125 \r\n",
       "L 12.890625 25.390625 \r\n",
       "L 37.796875 25.390625 \r\n",
       "z\r\n",
       "M 35.203125 72.90625 \r\n",
       "L 47.609375 72.90625 \r\n",
       "L 47.609375 25.390625 \r\n",
       "L 58.015625 25.390625 \r\n",
       "L 58.015625 17.1875 \r\n",
       "L 47.609375 17.1875 \r\n",
       "L 47.609375 0 \r\n",
       "L 37.796875 0 \r\n",
       "L 37.796875 17.1875 \r\n",
       "L 4.890625 17.1875 \r\n",
       "L 4.890625 26.703125 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-52\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(344.405877 239.238437)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-52\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "   </g>\r\n",
       "   <g id=\"matplotlib.axis_2\">\r\n",
       "    <g id=\"ytick_1\">\r\n",
       "     <g id=\"line2d_10\">\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 0 0 \r\n",
       "L -3.5 0 \r\n",
       "\" id=\"m34f98d3eef\" style=\"stroke:#000000;stroke-width:0.8;\"/>\r\n",
       "      </defs>\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"224.64\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_10\">\r\n",
       "      <!-- 0.0 -->\r\n",
       "      <g transform=\"translate(7.2 228.439219)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_2\">\r\n",
       "     <g id=\"line2d_11\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"198.604701\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_11\">\r\n",
       "      <!-- 0.1 -->\r\n",
       "      <g transform=\"translate(7.2 202.40392)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-49\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_3\">\r\n",
       "     <g id=\"line2d_12\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"172.569403\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_12\">\r\n",
       "      <!-- 0.2 -->\r\n",
       "      <g transform=\"translate(7.2 176.368622)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-50\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_4\">\r\n",
       "     <g id=\"line2d_13\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"146.534104\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_13\">\r\n",
       "      <!-- 0.3 -->\r\n",
       "      <g transform=\"translate(7.2 150.333323)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-51\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_5\">\r\n",
       "     <g id=\"line2d_14\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"120.498806\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_14\">\r\n",
       "      <!-- 0.4 -->\r\n",
       "      <g transform=\"translate(7.2 124.298024)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-52\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_6\">\r\n",
       "     <g id=\"line2d_15\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"94.463507\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_15\">\r\n",
       "      <!-- 0.5 -->\r\n",
       "      <g transform=\"translate(7.2 98.262726)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-53\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_7\">\r\n",
       "     <g id=\"line2d_16\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"68.428208\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_16\">\r\n",
       "      <!-- 0.6 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 33.015625 40.375 \r\n",
       "Q 26.375 40.375 22.484375 35.828125 \r\n",
       "Q 18.609375 31.296875 18.609375 23.390625 \r\n",
       "Q 18.609375 15.53125 22.484375 10.953125 \r\n",
       "Q 26.375 6.390625 33.015625 6.390625 \r\n",
       "Q 39.65625 6.390625 43.53125 10.953125 \r\n",
       "Q 47.40625 15.53125 47.40625 23.390625 \r\n",
       "Q 47.40625 31.296875 43.53125 35.828125 \r\n",
       "Q 39.65625 40.375 33.015625 40.375 \r\n",
       "z\r\n",
       "M 52.59375 71.296875 \r\n",
       "L 52.59375 62.3125 \r\n",
       "Q 48.875 64.0625 45.09375 64.984375 \r\n",
       "Q 41.3125 65.921875 37.59375 65.921875 \r\n",
       "Q 27.828125 65.921875 22.671875 59.328125 \r\n",
       "Q 17.53125 52.734375 16.796875 39.40625 \r\n",
       "Q 19.671875 43.65625 24.015625 45.921875 \r\n",
       "Q 28.375 48.1875 33.59375 48.1875 \r\n",
       "Q 44.578125 48.1875 50.953125 41.515625 \r\n",
       "Q 57.328125 34.859375 57.328125 23.390625 \r\n",
       "Q 57.328125 12.15625 50.6875 5.359375 \r\n",
       "Q 44.046875 -1.421875 33.015625 -1.421875 \r\n",
       "Q 20.359375 -1.421875 13.671875 8.265625 \r\n",
       "Q 6.984375 17.96875 6.984375 36.375 \r\n",
       "Q 6.984375 53.65625 15.1875 63.9375 \r\n",
       "Q 23.390625 74.21875 37.203125 74.21875 \r\n",
       "Q 40.921875 74.21875 44.703125 73.484375 \r\n",
       "Q 48.484375 72.75 52.59375 71.296875 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-54\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(7.2 72.227427)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-54\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_8\">\r\n",
       "     <g id=\"line2d_17\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"42.39291\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_17\">\r\n",
       "      <!-- 0.7 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 8.203125 72.90625 \r\n",
       "L 55.078125 72.90625 \r\n",
       "L 55.078125 68.703125 \r\n",
       "L 28.609375 0 \r\n",
       "L 18.3125 0 \r\n",
       "L 43.21875 64.59375 \r\n",
       "L 8.203125 64.59375 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-55\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(7.2 46.192128)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-55\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "    <g id=\"ytick_9\">\r\n",
       "     <g id=\"line2d_18\">\r\n",
       "      <g>\r\n",
       "       <use style=\"stroke:#000000;stroke-width:0.8;\" x=\"30.103125\" xlink:href=\"#m34f98d3eef\" y=\"16.357611\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "     <g id=\"text_18\">\r\n",
       "      <!-- 0.8 -->\r\n",
       "      <defs>\r\n",
       "       <path d=\"M 31.78125 34.625 \r\n",
       "Q 24.75 34.625 20.71875 30.859375 \r\n",
       "Q 16.703125 27.09375 16.703125 20.515625 \r\n",
       "Q 16.703125 13.921875 20.71875 10.15625 \r\n",
       "Q 24.75 6.390625 31.78125 6.390625 \r\n",
       "Q 38.8125 6.390625 42.859375 10.171875 \r\n",
       "Q 46.921875 13.96875 46.921875 20.515625 \r\n",
       "Q 46.921875 27.09375 42.890625 30.859375 \r\n",
       "Q 38.875 34.625 31.78125 34.625 \r\n",
       "z\r\n",
       "M 21.921875 38.8125 \r\n",
       "Q 15.578125 40.375 12.03125 44.71875 \r\n",
       "Q 8.5 49.078125 8.5 55.328125 \r\n",
       "Q 8.5 64.0625 14.71875 69.140625 \r\n",
       "Q 20.953125 74.21875 31.78125 74.21875 \r\n",
       "Q 42.671875 74.21875 48.875 69.140625 \r\n",
       "Q 55.078125 64.0625 55.078125 55.328125 \r\n",
       "Q 55.078125 49.078125 51.53125 44.71875 \r\n",
       "Q 48 40.375 41.703125 38.8125 \r\n",
       "Q 48.828125 37.15625 52.796875 32.3125 \r\n",
       "Q 56.78125 27.484375 56.78125 20.515625 \r\n",
       "Q 56.78125 9.90625 50.3125 4.234375 \r\n",
       "Q 43.84375 -1.421875 31.78125 -1.421875 \r\n",
       "Q 19.734375 -1.421875 13.25 4.234375 \r\n",
       "Q 6.78125 9.90625 6.78125 20.515625 \r\n",
       "Q 6.78125 27.484375 10.78125 32.3125 \r\n",
       "Q 14.796875 37.15625 21.921875 38.8125 \r\n",
       "z\r\n",
       "M 18.3125 54.390625 \r\n",
       "Q 18.3125 48.734375 21.84375 45.5625 \r\n",
       "Q 25.390625 42.390625 31.78125 42.390625 \r\n",
       "Q 38.140625 42.390625 41.71875 45.5625 \r\n",
       "Q 45.3125 48.734375 45.3125 54.390625 \r\n",
       "Q 45.3125 60.0625 41.71875 63.234375 \r\n",
       "Q 38.140625 66.40625 31.78125 66.40625 \r\n",
       "Q 25.390625 66.40625 21.84375 63.234375 \r\n",
       "Q 18.3125 60.0625 18.3125 54.390625 \r\n",
       "z\r\n",
       "\" id=\"DejaVuSans-56\"/>\r\n",
       "      </defs>\r\n",
       "      <g transform=\"translate(7.2 20.15683)scale(0.1 -0.1)\">\r\n",
       "       <use xlink:href=\"#DejaVuSans-48\"/>\r\n",
       "       <use x=\"63.623047\" xlink:href=\"#DejaVuSans-46\"/>\r\n",
       "       <use x=\"95.410156\" xlink:href=\"#DejaVuSans-56\"/>\r\n",
       "      </g>\r\n",
       "     </g>\r\n",
       "    </g>\r\n",
       "   </g>\r\n",
       "   <g id=\"line2d_19\">\r\n",
       "    <path clip-path=\"url(#pcbee4e38b3)\" d=\"M 48.364943 224.30491 \r\n",
       "L 54.452216 223.96982 \r\n",
       "L 60.539489 223.96982 \r\n",
       "L 66.626761 223.96982 \r\n",
       "L 72.714034 222.629459 \r\n",
       "L 78.801307 222.294369 \r\n",
       "L 84.88858 220.954008 \r\n",
       "L 90.975852 214.587295 \r\n",
       "L 97.063125 213.582025 \r\n",
       "L 103.150398 214.252205 \r\n",
       "L 109.23767 209.896033 \r\n",
       "L 115.324943 202.18896 \r\n",
       "L 121.412216 188.450264 \r\n",
       "L 127.499489 182.753731 \r\n",
       "L 133.586761 160.972871 \r\n",
       "L 139.674034 146.228904 \r\n",
       "L 145.761307 134.165659 \r\n",
       "L 151.84858 116.070791 \r\n",
       "L 157.935852 89.263578 \r\n",
       "L 164.023125 67.817809 \r\n",
       "L 170.110398 47.042219 \r\n",
       "L 176.19767 43.691318 \r\n",
       "L 182.284943 19.564827 \r\n",
       "L 188.372216 32.968433 \r\n",
       "L 194.459489 17.554286 \r\n",
       "L 200.546761 19.229736 \r\n",
       "L 206.634034 34.643883 \r\n",
       "L 212.721307 42.015867 \r\n",
       "L 218.80858 43.691318 \r\n",
       "L 224.895852 66.477448 \r\n",
       "L 230.983125 74.519612 \r\n",
       "L 237.070398 108.028627 \r\n",
       "L 243.15767 122.772594 \r\n",
       "L 249.244943 151.255257 \r\n",
       "L 255.332216 161.643051 \r\n",
       "L 261.419489 171.025576 \r\n",
       "L 267.506761 189.790624 \r\n",
       "L 273.594034 197.497698 \r\n",
       "L 279.681307 204.199501 \r\n",
       "L 285.76858 212.241664 \r\n",
       "L 291.855852 216.932926 \r\n",
       "L 297.943125 216.262746 \r\n",
       "L 304.030398 221.959279 \r\n",
       "L 310.11767 222.294369 \r\n",
       "L 316.204943 222.964549 \r\n",
       "L 322.292216 222.629459 \r\n",
       "L 328.379489 223.299639 \r\n",
       "L 334.466761 224.30491 \r\n",
       "L 340.554034 223.96982 \r\n",
       "L 346.641307 224.30491 \r\n",
       "\" style=\"fill:none;stroke:#ff7f0e;stroke-linecap:square;stroke-width:1.5;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_53\">\r\n",
       "    <path d=\"M 30.103125 224.64 \r\n",
       "L 30.103125 7.2 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_54\">\r\n",
       "    <path d=\"M 364.903125 224.64 \r\n",
       "L 364.903125 7.2 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_55\">\r\n",
       "    <path d=\"M 30.103125 224.64 \r\n",
       "L 364.903125 224.64 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "   <g id=\"patch_56\">\r\n",
       "    <path d=\"M 30.103125 7.2 \r\n",
       "L 364.903125 7.2 \r\n",
       "\" style=\"fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;\"/>\r\n",
       "   </g>\r\n",
       "  </g>\r\n",
       " </g>\r\n",
       " <defs>\r\n",
       "  <clipPath id=\"pcbee4e38b3\">\r\n",
       "   <rect height=\"217.44\" width=\"334.8\" x=\"30.103125\" y=\"7.2\"/>\r\n",
       "  </clipPath>\r\n",
       " </defs>\r\n",
       "</svg>\r\n"
      ],
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "rg = np.random.default_rng(1)\n",
    "import matplotlib.pyplot as plt\n",
    "# Build a vector of 10000 normal deviates with variance 0.5^2 and mean 2\n",
    "mu, sigma = 2, 0.5\n",
    "v = rg.normal(mu,sigma,10000)\n",
    "# Plot a normalized histogram with 50 bins\n",
    "plt.hist(v, bins=50, density=1)       # matplotlib version (plot)直方图\n",
    "# Compute the histogram with numpy and then plot it\n",
    "(n, bins) = np.histogram(v, bins=50, density=True)  # NumPy version (no plot)\n",
    "plt.plot(.5*(bins[1:]+bins[:-1]), n)  #折线图（这个计算平均值的方法好绝）\n",
    "#matplotlib的hist方法直接就画了（蓝线）\n",
    "#numpy的histogram方法返回两个向量：输入参数的直方图，bin_edges（那个长方形的宽长度）"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3.141592653589793\n"
     ]
    }
   ],
   "source": [
    "from numpy import pi\n",
    "print(pi)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'int32'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#random\n",
    "rg = np.random.default_rng(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Further Reading\n",
    "The [Python tutorial](https://docs.python.org/tutorial/)\n",
    "\n",
    "[NumPy Reference](https://numpy.org/doc/stable/reference/index.html#reference)\n",
    "\n",
    "[SciPy Tutorial](https://docs.scipy.org/doc/scipy/reference/tutorial/index.html)\n",
    "\n",
    "[SciPy Lecture Notes](https://scipy-lectures.org/)\n",
    "\n",
    "A [matlab, R, IDL, NumPy/SciPy dictionary](http://mathesaurus.sf.net/)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}